JSON结果与PHP代码中的jQuery无法正常工作

时间:2014-04-15 13:09:54

标签: php jquery ajax json

我有一个由AJAX返回的JSON数据:

PHP文件:

//SQL: fetch result if user exist
    $result = array("Name"=>$name, "ID"=>$id, "Age"=>$age, "School"=>$school, "Department"=>$dept);
    echo json_encode($result);
//else return error
    $error = 'No record for this user.';
    $result = array("Error"=>$error);
    echo json_encode($result);

jQuery AJAX:

//AJAX result
request.done(function( msg ):
//alert( msg ); working fine for users who exist and even those who doesn't exist.
var detail = jQuery.parseJSON( msg );
 if ( detail.Name.length > 0 ){
      $('.student').slideDown(300);
      $('.student').html(detail.Name);
      // this is working fine
    }
 if ( detail.Error.length > 0 ){
     $('.student').slideDown(300);
     $('.student').html(detail.Error); 
     //this is not working even if the user does not exist.
    }

我如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

在您检查detail.Name.length时,您的脚本将失败。该错误将阻止Javascript执行其余的操作。

如果出现错误,您的JSON数据将如下所示:

   {"Error":"No record for this user."}

如果您随后运行JavaScript代码:

if(detail.Name.length>0) 

... Javascript将返回“Uncaught TypeError:无法读取未定义的属性'长度...”并且它将停止执行所有其他JavaScript代码,因此它永远不会到达您的错误处理程序。

要解决此问题,请在知道记录存在之前不要检查记录的长度:

if(typeof detail.Name!="undefined" && detail.Name.length>0){
   ... etc... 

在这种情况下,您甚至不必检查lenth,如果设置了“name”,您知道它是由PHP脚本设置的......