jQuery AJAX PHP JSON问题
当我以以下方式执行AJAX请求时,我面临着接收空数组的问题: 这是我在JavaScript中执行的代码:jQuery AJAX PHP JSON问题,php,javascript,jquery,ajax,json,Php,Javascript,Jquery,Ajax,Json,当我以以下方式执行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">
<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>
var sJSON = $.toJSON(mJSON.id_consulta);
$.ajax({
type: "POST",
url: "getUbicaciones.php",
data: "json=" + sJSON,
processData: false,
success: function(respuesta){
},
error: function (request,error){
}
});
关于我做错了什么有什么线索吗
字符串sJSON的编码正确,这是我对该字符串执行“警报”时得到的结果:
{"id_consulta":[{"id":1},{"id":2},{"id":3}]}
提前谢谢大家 从JavaScript中,您需要像这样传递数据,作为键值对:
data: {"mydata" : sJSON},
在PHP方面,由于是一个关联数组,因此您可以这样访问数据:
$m_decoded = $_POST['mydata'];
您没有在PHP端解码JSON
试试看你的代码中有几个问题:
数据类型:“json”
,但服务器不返回json,而是返回纯文本。从:
希望从服务器返回的数据类型。如果未指定,jQuery将根据响应的MIME类型智能地尝试获取结果(XML MIME类型将生成XML,在1.4中JSON将生成JavaScript对象,在1.4中脚本将执行脚本,其他任何内容都将作为字符串返回)
{"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:
<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>
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:
请注意,我必须使用“stripslashes”,因为JSON字符串中的“字符”有斜线
谢谢大家的帮助,我希望这对其他人有帮助。是的,但在他的例子中,我想他只是指出
$\u POST
数组是空的。大概一旦收到数据,他就需要使用json\u decode
来做一些有用的事情。谢谢你的快速响应Felix,但我认为如果不起作用,我将ajax请求更改为:$.ajax({type:“POST”,url:“getUbicaciones.php”,data:“json=“+$.toJSON(mJSON.id_consulta),processData:false,success:function(respuesta){alert(“success:+respuesta”);},error:function(请求,error){alert(“error:error:“+request.statusText+”“+error);}});在PHP中我做到了:$m_decoded=json_decode($_POST[“json”]);但是结果现在是空的,$m_decoded是空的,还有其他线索吗?我收到的是PHP(json编码):[{\'id\':0},{\'id\':1},{\'id\':2}]如果尝试用json_decode解码,它返回“空”。我正在尝试:$m_decoded=json_decode($_POST[“json”]);结果什么都没有。您是否尝试过使用firebug查看POST请求中实际发送的内容?另外,您为什么说contentType:“application/json;charset=utf-8”
,而不是contentType:
“application/json”`实际上您不需要指定contentType
,由于您将发布的是一个序列化json数组,它最终将转换为键值对字符串(jquery在内部执行此操作),contentType
用于告诉您发送的数据类型。。。在本例中,json将被转换为键值对,并以普通字符串发送<代码>数据类型:如果您读取要发送到服务器的数据,“json”
足以让它工作。如果尚未转换为字符串,则会将其转换为查询字符串。它被附加到GET请求的url。请参阅processData选项以防止此自动处理。对象必须是键/值对。如果value是一个数组,jQuery将基于传统设置(如下所述)的值用同一个键序列化多个值。效果很好,但您可以简单地说data:mJSON
,无需提及processData
,也无需使用var sJSON=$.toJSON(mJSON.id\u consulta)将其转换为JSON;代码>。您可以简单地编写data:mJSON
并删除processData参数
。。。。在PHP端,您将直接获得一个数组,该数组不需要解码
也不需要条带斜杠
$m_decoded = json_decode(stripslashes($_POST["json"]));