получить ajax json POST в php и вернуть в успех
что я делаю неправильно?
<html>
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
$(document).ready(function(){
$('#btn1').click(function(){
var tmp = {"Proc":3236470};
$.ajax({
type: 'POST',
url: 'test.php',
data: {'rel':tmp},
success: function(data) {
$('body').append(data);
//alert(data);
}
});
});
});
</script>
</head>
<body>
<button id="btn1">
teste
</button>
</body>
Test.php -
<?php
header('Cache-Control: no-cache, must-revalidate');
header('Content-Type: application/json; charset=utf-8')
$aDados = json_decode($_POST['rel'], true);
echo $aDados["Proc"];
?>
ОШИБКА: Parse error: syntax error, unexpected '$взначение данныхполе' (T_VARIABLE)
3 answers
, Чтобы получить данные из ajax, просто используйте метод(POST) и правильный ключ(rel), как указано в коде
data: {'rel': tmp},
Для преобразования json в массив в php используйте json_decode()
header('Content-Type: text/html; charset=utf-8');// para formatar corretamente os acentos
$arr = json_decode($_POST['rel'], true);
echo '<pre>';
print_r($arr);
Выход:
Array
(
[0] => Array
(
[Proc] => 3236470
[Envio] => 08/05/2014
[Usuário Digitalizador] => CSC TI
[Tp Doc] => Serviços
[Unidade] => CSC-TI
)
)
PHP (отчет.php) генерировать ответ типа JSON:
<?php
//Alteramos o cabeçalho para não gerar cache do resultado
header('Cache-Control: no-cache, must-revalidate');
//Alteramos o cabeçalho para que o retorno seja do tipo JSON
header('Content-Type: application/json; charset=utf-8')
//Convertemos o array em um objecto json
echo json_encode(array('erro' => '0','msg' => 'Executado com sucesso'));
?>
Важно, что заголовок будет вызываться до любого вывода, в противном случае возвращается "warning", чтобы понять, попробовать поставить echo('test'); перед header.
В php (отчет.php), чтобы работать с массивом отправлен запрос AJAX, просто сделать следующим образом:
<?php
header('Cache-Control: no-cache, must-revalidate');
header('Content-Type: application/json; charset=utf-8')
$aDados = json_decode($_POST['rel'], true);
$nProc = $aDados["Proc"];
echo json_encode(array("erro" => "0", "proc" => $nProc));
?>
Обратите внимание, что мы используем ассоциативный массив, то есть, на месте использование цифр в качестве показателя, используем имена, например, "ошибка" и "труды". Это имена, они будут доступны в функции, которая выполняется в параметр "success" из вашего вызова AJAX.
Для работы с json, который возвращается, измените функцию, которая выполняется в параметре "success":
$('#btn').click(function(){
var tmp = {"Proc":3236470,"Envio":"08/05/2014","Usuário Digitalizador":"CSC TI","Tp Doc":"Serviços","Unidade":"CSC-TI"};
$.ajax({
type: 'POST',
url: 'relatorio.php',
data: {rel:tmp},
dataType: 'json',
success: function(data) {
//$('body').append(data);
alert("O processo número "+data["proc"]+" foi enviado com sucesso");
}
});
});
Товарища, пропускала свой код здесь и теги header действительно тебя не работает. Когда убрал, провел дать errinho как-то я, передавая json прямой и с помощью json_decode, про что функция json_decode ожидает string. Затем вы можете передать как строку и использовать json_decode в php или пройти как json, а не использовать json_decode в php.
Следующий код работает :
<html>
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
$(document).ready(function()
{
$('#btn1').click(function()
{
var tmp = {"Proc":3236470};
//var tmp = '{"Proc":3236470}'; // se usar json_decode, tem que passar como string
$.ajax({
type: 'POST',
url: 'test.php',
data: {
'rel':tmp,
},
success: function(data) {
$('body').append(data);
// alert(data);
}
});
});
});
</script>
</head>
<body>
<button id="btn1">
teste
</button>
</body>
<html>
Страницу test.php:
<?php
//$aDados = json_decode($_POST['rel'], true);
$aDados = $_POST['rel']; //se for passar como json direto, não usar json_decode
var_dump($aDados);