用php发送的JQuery AJAX访问数据
我有一个AJAX:用php发送的JQuery AJAX访问数据,php,jquery,ajax,json,Php,Jquery,Ajax,Json,我有一个AJAX: $.ajax({ url : get_base_url() + 'update', type : 'POST', async : false, data : json_positions, dataType : 'html',
$.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)
}
});
发送的数据为:
位置
这是一个如下的字符串:
{"new_positions" : [{ "id": "2", "position": "0"},{ "id": "5", "position": "1"},{ "id": "4", "position": "2"}]}
我想在PHP页面中使用json_decode()解码json_位置,但似乎没有将tdata发送到PHP页面,因为当我尝试:
print_r($_POST);
它使用console.log(data)返回一个空数组。因为您正在发送json数据,所以需要定义适当的内容类型:
contentType: 'application/json'
此外,如果您希望返回json数据,请将数据类型更改为json:
dataType : 'json'
由于您正在发送json数据,因此需要定义适当的内容类型:
contentType: 'application/json'
此外,如果您希望返回json数据,请将数据类型更改为json:
dataType : 'json'
你的代码没问题,不需要修改任何东西。但这是你传递数据的方式 发送的数据是:
json\u positions
,这是一个如下字符串:
你不应该像传递绳子一样传递它。它应该是一个对象,就像您定义的那样:
{"new_positions" : [{ "id": "2", "position": "0"},{ "id": "5", "position": "1"},{ "id": "4", "position": "2"}]}
确保传递的对象是,而不是字符串,例如,不要在其周围添加任何引号等。这样它就可以正常工作
编辑
根据jQuery文档的$。ajax数据参数:
数据对象,字符串
要发送到服务器的数据。如果尚未转换为字符串,则会将其转换为查询字符串。它被附加到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
});
});
你的代码没问题,不需要修改任何东西。但这是你传递数据的方式 发送的数据是:
json\u positions
,这是一个如下字符串:
你不应该像传递绳子一样传递它。它应该是一个对象,就像您定义的那样:
{"new_positions" : [{ "id": "2", "position": "0"},{ "id": "5", "position": "1"},{ "id": "4", "position": "2"}]}
确保传递的对象是,而不是字符串,例如,不要在其周围添加任何引号等。这样它就可以正常工作
编辑
根据jQuery文档的$。ajax数据参数:
数据对象,字符串
要发送到服务器的数据。如果尚未转换为字符串,则会将其转换为查询字符串。它被附加到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
});
});
$\u POST
仅包含键值对内容。您发布的JSON位于$\u HTTP\u RAW\u POST\u数据中
$\u POST
仅包含键值对内容。您发布的JSON位于$\u HTTP\u RAW\u POST\u DATA
数据类型用于从服务器发送到客户端的数据,而不是从Ajax发送的数据注意:jQuery实际上智能地猜测数据类型
参数,但是指定数据类型肯定更安全。数据类型用于从服务器发送到客户端的数据,而不是从ajaxNote发送的数据:jQuery实际上智能地猜测数据类型
参数,但指定它肯定更安全。它没有任何类型的引号,它是使用:var json_positions='{';json_positions+='创建的“新位置”:['$.each(结果、函数(键、值){var value_splitted=value.split('-');json_positions+='{“id”:“+value_splitted[1]+',“position”:“+key+'”;if(键!=result.length-1){json_positions+=',“;});好的,这就是我所说的。您应该将对象作为数据传递,而不是字符串。因此,不要创建字符串,而是创建一个对象。它没有任何类型的引号,而是使用:var json_positions='{';json_positions+=''new_positions:['$。each(result,function(key,value){var value_splited=value.split('-';json_positions+='{“id”:“+value_splitted[1]+',“position”:“+key+''}”;if(key!=result.length-1){json_positions+=',“;}}”);好的,这就是我要说的。你应该将对象作为数据传递,而不是字符串。因此,不创建字符串,只创建对象。