Javascript Jquery和ajax如何解析json?

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

我正在使用Jquery和ajax

我有一个简单的表单和我的jquery

这是一段代码:

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的结果,并获取totalabo


注意:我的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();
}