我有这个AJAX:
$.ajax({
url : get_base_url() + 'update',
type : 'POST',
async : false,
data : json_positions,
dataType : 'html',
success : function(data) {
console.log(data);
},
error : function(jqXHR, textStatus, errorThrown) {
console.log('error:');
console.log(jqXHR);
console.log(textStatus);
console.log(errorThrown)
}
});
发送的数据是:
json_positions
这是一个像这样的字符串:
{"new_positions" : [{ "id": "2", "position": "0"},{ "id": "5", "position": "1"},{ "id": "4", "position": "2"}]}
我想在PHP页面中使用json_decode()解码json_positions,但似乎tdata没有发送到php页面,因为当我尝试:
print_r($_POST);
它使用console.log(数据)返回一个空数组。
答案 0 :(得分:2)
你的代码没问题,不需要改变任何东西。但这就是你传递数据的方式。
发送的数据是:
json_positions
这是一个像这样的字符串:...
你不应该像 string 那样传递它。它应该是一个对象,就像你诋毁它一样:
{"new_positions" : [{ "id": "2", "position": "0"},{ "id": "5", "position": "1"},{ "id": "4", "position": "2"}]}
确保传递对象,而不是字符串,例如不要在它周围添加任何引号等等。它会正常工作。
根据 $。ajax数据参数的jQuery文档:
dataObject,String 要发送到服务器的数据。如果不是字符串,它将转换为查询字符串。它附加到GET请求的URL。请参阅processData选项以防止此自动处理。对象必须是键/值对。如果value是一个数组,jQuery会根据传统设置的值使用相同的键序列化多个值(如下所述)。
因此,您的数据应该是查询字符串或对象。
在你的情况下,我建议使用对象。与此代码一样:
var json_positions = {
new_positions: []
};
$.each(result, function(key, value) {
var value_splitted = value.split('-');
json_positions.new_positions.push({
id: value_splitted[1],
position: key
});
});
答案 1 :(得分:1)
由于您要发送json数据,因此需要定义适当的内容类型:
contentType: 'application/json'
另外,如果您希望返回json数据,请将dataType更改为json:
dataType : 'json'
答案 2 :(得分:0)
$_POST
仅包含键值对。您的POSTed JSON位于$_HTTP_RAW_POST_DATA
。