0

我正在使用 jQuery 将数据输入到 php 文件并通过 json 返回结果。但是,json 出现在 firebug 中,但变量“messageOutput”未在表单上显示结果。如果我用 'msg.box' 替换 'messageOutput' 那么它打印得很好。

如果我在表单上输入超过 1 个项目,则会出错:'object object'。

有人可以指出我的错误在哪里,因为我多年来一直在努力解决这个问题。如果您需要查看更多代码,请询问。非常感谢。

jQuery代码:

submitHandler: function()   {
                if ($("#BA_boxform").valid() === true)  { 
                var data = $("#BA_boxform").serialize();
                $.post('/domain/admin/requests/boxes/boxesadd.php', data, function(msg) {

               var messageOutput = '';
                for (var i = 0; i<msg.length; i++){
                    messageOutput += msg[i].box+'  ';     
                }
        $("#BA_addbox").html("You have entered box: " + "<b>" + messageOutput + "</b><br /> You may now close this window.");
                $("#BA_boxform").get(0).reset();
                }, 'json');

         } else

         { 
           return; 
         }
        },
        success:    function(msg)   {
                //$("#BA_addbox").html("You have entered a box");
                //$("#BA_boxform").get(0).reset();
        } 

boxadd.php

<?php

     $dept = mysql_real_escape_string($_POST['customerdept']);
     $company = mysql_real_escape_string($_POST['BA_customer']);
     $address = mysql_real_escape_string($_POST['customeraddress']);
     $service = mysql_real_escape_string($_POST['BA_service']);
     $box = mysql_real_escape_string($_POST['BA_box']);
     $destroydate = mysql_real_escape_string($_POST['BA_destdate']);
     $authorised = mysql_real_escape_string($_POST['BA_authorised']);
     $submit = mysql_real_escape_string($_POST['submit']);
     $boxerrortext = 'You must enter a box for intake';

     $array = split('[,]', $_POST['BA_box']);

     if (isset($_POST['submit']))   {
      foreach ($array as $box) {
      if (empty($box)) {
       $error = array('boxerrortext'=>$boxerrortext);

     $output = json_encode($error);

     echo $output;


     }
    else
     {

     $form=array('dept'=>$dept,
                 'company'=>$company,
                 'address'=>$address,
                 'service'=>$service,
                 'box'=>$box,
                 'destroydate'=>$destroydate,
                 'authorised'=>$authorised,
                 'submit'=>$submit);
     $result=json_encode($form);

     echo $result;
?>
4

1 回答 1

1

在不知道请求响应是什么样子的情况下很难调试它。您确定服务器返回一个数组吗?我不熟悉 php,所以我在那里没有帮助,快速看起来似乎 php 'array' 真的更类似于 js 对象文字然后是 js 数组。即它看起来像是一堆键/值对。

在这种情况下,您应该使用 for/in 循环而不是 for/each

for ( var key in msg ) 
    messageOutput += msg[key] // => concats dept, company, address, etc

如果您真的期望这些对象的数组(其中您有一堆带有道具“框”的对象),那么您在 javascript 中正确执行此操作,但您可能没有从服务器发送正确的对象。

你能打开开发面板/萤火虫并向我们展示从服务器返回的内容吗?尝试添加:

 console.log($.isArray(msg))

并查看它是否返回 true。确保返回的一种方法是使用数组,我称之为 splat 实用程序:

function splat(obj){
  return $.isArray(obj) ? obj : [ obj ];
}

这确保你总是在处理一个数组,尽管有时是一个数组

于 2013-10-31T18:33:34.270 回答