当我使用$.ajax从服务器获取数据时,格式看起来与$.post请求结果不同。如何更改$.post请求以接收与$.ajax请求相同的格式?否则,我无法使用for-循环读取数据:
使用$ajax的工作代码:
$.ajax({
url: "/fetchdata.php",
type: "POST",
dataType: "json",
data: "param=no",
success: function(data){
console.log(data);
for(var i = 0; i < data.length; i++){
$('#DOM').append('<li>'+ data[i].username +'</li>');
}
},
error: function(e){
console.log(e);
}
});控制台中的$.ajax结果:
[Object, Object, Object, Object]不使用$.post的代码:
var jqxhr = $.post( "/fetchdata.php", function(data) {
console.log(data);
for(var i = 0; i < data.length; i++){
$('#DOM').append('<li>'+ data[i].username +'</li>');
}
})
.done(function() {
})
.fail(function() {
})
.always(function() {
}); 控制台中的$.post结果:
[{"id_usesrs":"1","username":"A"},{"id_usesrs":"2","username":"B"},{"id_usesrs":"3","username":"C"},
{"id_usesrs":"4","username":"D"}] 发布于 2014-10-28 12:34:29
您需要指定它返回JSON,而不是字符串
$.post("/fetchdata.php", function(data) { ... }, 'json')$.post()的最后一个参数是dataType在$.ajax()中的等效值。
更多信息http://api.jquery.com/jquery.post/
发布于 2014-10-28 12:36:40
在$.post中,未指定返回数据类型,
使用这个
var jqxhr = $.post( "/fetchdata.php", function(data) {
console.log(data);
for(var i = 0; i < data.length; i++){
$('#DOM').append('<li>'+ data[i].username +'</li>');
}
},'json')
.done(function() {
})
.fail(function() {
})
.always(function() {
}); 发布于 2014-10-28 12:40:27
原因是,在您的$.post上,没有指定reaturn数据类型,而且数据类型的标准是“智能猜测”(比较http://api.jquery.com/jQuery.post/)。因此,服务器返回一个json格式字符串,$.post方法将其解释为字符串,而不是对象。这个字符串可以用JSON.parse( string )转换为json对象;
在您的$.ajax调用中,您肯定将返回类型定义为json,因此$.ajax mehtod在字符串上自动使用JSON.parse。您可以为$.post方法使用可选的数据类型参数(如jquery规范所示):
var jqxhr = $.post( "/fetchdata.php", function(data) {
console.log(data);
for(var i = 0; i < data.length; i++){
$('#DOM').append('<li>'+ data[i].username +'</li>');
}
}, "json")
.done(function() {
})
.fail(function() {
})
.always(function() {
}); https://stackoverflow.com/questions/26608417
复制相似问题