使用jQuery解析JSON时的意外结果

时间:2013-04-02 08:55:08

标签: jquery json

小提琴:http://jsfiddle.net/wy4wd/19/

我正在解析一个json对象,但它正在落入到其他地方,导致html为Error时它应该是ID not found而我无法找出原因。

如果success1,则效果正常。

JSON由帖子请求返回,但出于问题目的,我在本地声明它。

$(document).ready(function() {
    var data = '{"success": "0","patient_cid": "0"}';
    var response = jQuery.parseJSON(data);

    if (response.success == 0) {
        if (response.patient_cid == 0) {            
            $('#resultpanel').html('<p>ID not found</p>');
        }
        if (response.patient_ambassador == 0) {                 
            $('#resultpanel').html('<p>ID found but not an ambassador</p>');
        }               
        if (response.soap_error == '1') {                   
            $('#resultpanel').html('<p>SOAP error</p>').fadeIn('slow');
        }                   
    }
    if (response.success == 1){
        $('#resultpanel').html('<p>success</p>').fadeIn('slow');
    }   
    else {              
        $('#resultpanel').html('<p>Error</p>').fadeIn('slow');
    }   
});

3 个答案:

答案 0 :(得分:2)

应该是

//... previous code here
else if (response.success == 1){
//... the rest of the code here

如果我理解正确的话。

否则将执行第一个错误解析,但替换为最后一个else语句中的代码。

答案 1 :(得分:1)

它与解析JSON无关,它是if语句中导致这种情况的逻辑。

实际上,该面板实际上设置为“ID not found”,但之后将其替换为“Error”。

首先将else放在您处理success == 0的位置,然后使用else if创建一系列条件:

if (response.success == 0) {
    if (response.patient_cid == 0) {            
        $('#resultpanel').html('<p>ID not found</p>');
    }
    else if (response.patient_ambassador == 0) {                 
        $('#resultpanel').html('<p>ID found but not an ambassador</p>');
    }               
    else if (response.soap_error == '1') {                   
        $('#resultpanel').html('<p>SOAP error</p>').fadeIn('slow');
    }                   
    else {              
        $('#resultpanel').html('<p>Error</p>').fadeIn('slow');
    }
}
if (response.success == 1){
    $('#resultpanel').html('<p>success</p>').fadeIn('slow');
}   

答案 2 :(得分:1)

您将值设置为您想要的值,然后通过此行重置为Error $('#resultpanel').html('<p>Error</p>').fadeIn('slow');

您应该了解javascript中的错误和真实y如何工作: 我会做这样的事情:

$(document).ready(function() {
var data = '{"success": "0","patient_cid": "0"}',
    response = jQuery.parseJSON(data),
    message;

    if (response.success == '1') {
        message = 'success';
    }
    else {
        if (response.patient_cid == '0') {            
            message = 'ID not found';
        }
        else if (response.patient_ambassador == '0') {
            message = 'ID found but not an ambassador';                 
        }               
        else if (response.soap_error == '1') {
            message = 'SOAP error';                              
        }
        else {              
            message = 'Error';                              
        }   
    }   
    $('#resultpanel').html('<p>' + message + '</p>').fadeIn('slow');
});