[英]jQuery AJAX PHP JSON problem
当我以下列方式执行AJAX请求时,我遇到了接收空数组的问题:
这是我在JavaScript中执行的代码:
<script type="text/javascript" src="lib/jquery.js"></script>
<script type="text/javascript" src="lib/jquery.json.js"></script>
<script type="text/javascript">
$(document).ready(function(){
/* Preparar JSON para el request */
var mJSON = new Object;
mJSON.id_consulta = new Array;
for (var i=0; i<3; i++){
mJSON.id_consulta[i] = new Object;
mJSON.id_consulta[i].id = i;
}
var sJSON = $.toJSON(mJSON);
$.ajax({
type: "POST",
url: "getUbicaciones.php",
data: sJSON,
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function(respuesta){
alert(respuesta);
},
error: function (request,error){
alert("Error: " + request.statusText + ". " + error);
}
});
});
</script>
这是PHP下的代码:
<?php
/* Decodificar JSON */
$m_decoded = $_POST;
print_r($m_decoded);
exit;
?>
我从中得到的是,使用Chrome的开发人员工具是一个空数组:
Array
(
)
关于我做错了什么的线索?
字符串sJSON正在被正确编码,这是我在那个上做“警告”时得到的:
{"id_consulta":[{"id":1},{"id":2},{"id":3}]}
提前谢谢大家!
从您的JavaScript中,您需要将这样的数据作为键值对传递:
data: {"mydata" : sJSON},
在PHP方面,因为$ _POST是一个关联数组,你可以像这样访问你的数据:
$m_decoded = $_POST['mydata'];
你不是在PHP端解码JSON。
您的代码中存在几个问题:
您正在声明dataType: "json"
但服务器不返回JSON,它返回纯文本。 从文档 :
您期望从服务器返回的数据类型。 如果没有指定,jQuery将智能地尝试获取结果,基于响应的MIME类型(XML MIME类型将产生XML,在1.4 JSON中将产生一个JavaScript对象,在1.4脚本中将执行脚本,以及任何东西else将作为字符串返回)。
我不认为jQuery可以成功地将您的数据转换为查询字符串。 您正在尝试发送一组对象:
{"id_consulta":[{"id":1},{"id":2},{"id":3}]}
使用Firebug并检查实际发送的数据。 如果要将整个字符串作为JSON发送,则必须将processData
选项设置为false:
$.ajax({ type: "POST", url: "getUbicaciones.php", data: "json=" + $.toJSON(mJSON.id_consulta), processData: false, //....
你必须解码服务器端的字符串:
$data = json_decode($_POST['json']);
终于成功了! 它是这样的:
JavaScript的:
var sJSON = $.toJSON(mJSON.id_consulta);
$.ajax({
type: "POST",
url: "getUbicaciones.php",
data: "json=" + sJSON,
processData: false,
success: function(respuesta){
},
error: function (request,error){
}
});
PHP:
$m_decoded = json_decode(stripslashes($_POST["json"]));
请注意,我必须使用“stripslashes”,因为JSON字符串具有“字符”的斜杠。
谢谢大家的帮助,我希望这有助于其他人。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.