2013-10-31 98 views
0

我正在使用jQuery將數據輸入到php文件並通過json返回結果。但是,json出現在螢火蟲中,但變量'messageOutput'不在窗體上顯示結果。如果我將'messageOutput'替換爲'msg.box',那麼它會打印正常。jQuery submitHandler:函數不顯示數據

如果我在窗體上輸入了多於一個項目,那麼它會出錯:'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(); 
     } 

boxesadd.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; 
?> 

回答

1

它很難調試它不知道的請求響應的樣子。你確定服務器返回一個數組嗎?我不熟悉PHP,所以我不會在那裏幫忙,看起來很快,看起來php的'數組'實際上更類似於js對象字面量然後是js數組。即它看起來像是一堆鍵/值對。

在這種情況下,你應該使用for/in循環,而不是對/每

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

如果你真的希望這些對象的數組(在那裏你有一堆的對象與道具'box'),那麼你在JavaScript中正確地做了它,但你可能不會從服務器發送正確的對象。

你可以彈出打開開發面板/螢火蟲,並告訴我們從服務器返回什麼? 嘗試添加:

console.log($.isArray(msg)) 

,看它是否返回真實與否。確保返回,一種方法是一個數組是使用,我稱之爲圖示工具:

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

這樣可以確保始終處理一個陣列,雖然有時是一個時間的數組

+0

在哪裏我會把console.log語句?我已經試過這樣但沒有顯示控制檯:var messageOutput =''; (var i = 0; i user1532468

+0

把它放在循環之外,正上方。如果它在循環中,並且它不會觸發,這表明msg不是數組 –