ajax回调中的NaN错误


NaN error in ajax callback

我在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;
  });
});

NaN(发音为nan,与man押韵)仅在您尝试执行需要数字操作数的操作时发生。例如,当您尝试Number('man')时,您将得到以下错误:

从PHP文件返回的只是一个包含简单数据的数组。所以,问题出在JavaScript上。你必须发送更多的JavaScript部分,这样我们才能彻底地看到它。

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