ajax回调中的NaN错误

时间:2011-09-17 17:40:04

标签: php javascript jquery ajax

我的ajax回调函数出现NaN错误,只能认为它与PHP中的数组有关。我一直试图找到纠正它的方法,但是遇到了一堵砖墙。

应该发生的是PHP查询数据库,如果没有结果,则向ajax发送响应并发出错误消息。但是,我得到的只是NaN。该错误源于以下success代码。

如果有人能指出我的错误,我将不胜感激。

PHP代码:

$duplicates = array();

foreach ($boxnumber as $val) {
    if ($val != "") {
        mysql_select_db($database_logistor, $logistor);
        $sql = "SELECT custref FROM boxes WHERE custref='$val' and status = 'In'";
        $qry = mysql_query($sql) or die(mysql_error());

        if (mysql_num_rows($qry) < 1) {
            $duplicates[] = '[ ' . $val . ' ]';
            $flag = 1;
        } else {
            $duplicates[] = $val;
        }
    }
}

//response array with status code and message
$response_array = array();
if (!empty($duplicates)) {
    if ($flag == 1) {
//set the response
        $response_array['status'] = 'error';
        $response_array['message'] = 'ERROR: ' . implode(',', $duplicates) . ' needs to be in the database to be retrived.';
    }
//if no errors
} else {

//set the response
    $response_array['status'] = 'success';
    $response_array['message'] = 'All items retrieved successfully';
    $response_array['info'] = ' You retrieved a total of: ' . $boxcount . ' boxes';
}

//send the response back
echo json_encode($response_array);

相关的ajax:

$("#brtv-result").html(msg.message+msg.info);

jQuery代码:

$(function() {

 $("#BRV_brtrv").submit(function() {

   var send = $(this).serialize();

    $.ajax({
      type: "POST",
      url: "boxrtrv.php",
      cache: false,
      data: send,
      dataType: "json",
      success: function(msg) {
       if( msg.status === 'error') {
          $("#brtv-result").fadeIn(1000).delay(1000).fadeOut(1000);
          $("#brtv-result").removeClass('error');
          $("#brtv-result").removeClass('success');
          $("#brtv-result").addClass(msg.status);
          $("#brtv-result").html(msg.message);
       }

       else {
          $("#brtv-result").fadeIn(2000).delay(2000).fadeOut(2000);
          $("#brtv-result").removeClass('error');
          $("#brtv-result").addClass('success');
          $("#brtv-result").addClass(msg.status);
          $("#brtv-result").html(msg.message+msg.info);
          //location.reload(true);
          //$('#brtv-result').addClass("result_msg").html("You have successfully retrieved: "+data.boxnumber).show(1000).delay(4000).fadeOut(4000);
          $("#BRV-brtrv-slider").val(0).slider("refresh");
          $("input[type='radio']").attr("checked",false).checkboxradio("refresh");
          var myselect = $("select#BRV-brtrv-department");
          myselect[0].selectedIndex = 0;
          myselect.selectmenu("refresh");
          var myselect = $("select#BRV-brtrv-address");
          myselect[0].selectedIndex = 0;
          myselect.selectmenu("refresh");
      }

     },
      error:function(){
         $("#brtv-result").show();
         $("#brtv-result").removeClass('success');
         $("#brtv-result").addClass('error');
         $("#brtv-result").html("There was an error submitting the form. Please try again.");
     }
   });
   return false;
  });
});

1 个答案:

答案 0 :(得分:3)

NaN(发音为nan,与人押韵)仅在您尝试执行需要操作数的操作时才会发生。例如,当您尝试Number('man')时,您将收到此错误。

从PHP文件返回的内容只是一个只包含数据的数组。所以,问题在于你的JavaScript。您必须发送更多JavaScript部分,以便我们可以彻底查看。

但是,我建议您使用Firebug并在正确的位置设置breakpint(回调函数start),并检查调用的堆栈跟踪以诊断问题。