Javascript Jquery和ajax如何解析json?
我正在使用Jquery和ajax 我有一个简单的表单和我的jquery: 这是一段代码:Javascript Jquery和ajax如何解析json?,javascript,php,jquery,ajax,json,Javascript,Php,Jquery,Ajax,Json,我正在使用Jquery和ajax 我有一个简单的表单和我的jquery: 这是一段代码: username = $('input[name="username"]').val(); $.post("api.php", {username: username}, function(data) { if(data == "error") { data("erreur"); } else { alert(data); $('inpu
username = $('input[name="username"]').val();
$.post("api.php", {username: username}, function(data) {
if(data == "error") {
data("erreur");
} else {
alert(data);
$('input[name="subscribers"]').attr("placeholder", "something").blur();
$('input[name="viewCount"]').attr("placeholder", "something").blur();
}
});
以及警报(数据)的结果代码>
我想把总计的结果和abo的结果放在我的位置:
$('input[name="subscribers"]').attr("placeholder", ?abo?).blur();
但是我不知道谁来恢复json的结果,并获取total和abo
注意:我的json由文件api.php生成,带有json\u encode
jQuery似乎试图将json作为文本(或者更可能是HTML)处理
告诉jQuery它是JSON:
<?php header("Content-Type: application/json"); ?>
试试这个:
if (data) {
data = JSON.parse(data);
$('input[name="subscribers"]').attr("placeholder", data.abo).blur();
}
您可以使用$.parseJSON()
来解析json
username = $('input[name="username"]').val();
$.post("api.php", {username: username}, function(data) {
if(data == "error") {
data("erreur");
} else {
alert(data);
data=$.parseJSON(data); // add this line
$('input[name="subscribers"]').attr("placeholder", "something").blur();
$('input[name="viewCount"]').attr("placeholder", "something").blur();
}
});
JSON是一个表示(在本例中)对象的字符串,因此data
是一个字符串。为了从字符串转到对象,需要对其进行解析。有一个JSON.parse()
函数可以实现这一点:
if(data == "error") {
data("erreur");
} else {
alert(data);
var yourObj = JSON.parse(data);
$('input[name="subscribers"]').attr("placeholder", yourObj.abo).blur();
$('input[name="viewCount"]').attr("placeholder", yourObj.subscribers).blur();
}
尝试向$.post
调用添加第四个参数:$.post('api.php',{username:username},function(data){},'json'),以告诉jQuery解析json。然后
data`将是一个对象(而不是函数)。然后,您可以访问数据.total
和数据.abo
。查看:另外,如果出现错误,请不要用错误“
回复。回答{error:true}
,这样你就可以让jQuery将其解析为JSON并检查数据。error
@RocketHazmat如果我用参数“JSON”使用你的解决方案,它工作得很好,但我也可以使用“JSON.parse(data);”,哪一个更好?@Martialp:我不喜欢手动调用JSON.parse
,但这取决于你。当你可以通过设置内容类型:application/JSON
或将'JSON'
作为第四个参数传递给$.post
?@RocketHazmat来告诉jQuery为你做这件事时,为什么要使用JSON.parse
?@RocketHazmat主要是因为我很懒,jQuery的隐式解析会破坏if(data==“error”)
测试。但是,您是正确的,更好的解决方案是让jQuery隐式解析它,并在对象中返回一个属性,指示是否存在错误。我想,尽管我建议使用{error:true}
响应错误,这样您就可以检查数据。error
@RocketHazmat您是对的。若您可以更改服务器端代码,那个么您应该在服务器端处理它并按原样使用数据。同意!如果有错误,应该使用HTTP状态代码和错误处理程序
以及成功处理程序来处理。(但这并没有停止,如果你想发回一个纯文本消息正文,你可以做Content-Type:text/plain
,然后比较就可以了。)这是他在响应中的回声,否则他会响应json数据
username = $('input[name="username"]').val();
$.post("api.php", {username: username}, function(data) {
if(data == "error") {
data("erreur");
} else {
alert(data);
data=$.parseJSON(data); // add this line
$('input[name="subscribers"]').attr("placeholder", "something").blur();
$('input[name="viewCount"]').attr("placeholder", "something").blur();
}
});
if(data == "error") {
data("erreur");
} else {
alert(data);
var yourObj = JSON.parse(data);
$('input[name="subscribers"]').attr("placeholder", yourObj.abo).blur();
$('input[name="viewCount"]').attr("placeholder", yourObj.subscribers).blur();
}