2013-08-20 32 views
0

我通過Ajax(返回地址)通過PHP返回客戶地址數組。 我文件撰寫,其顯示完全Ajax PHP/Javascript數組

Array ([0] => Array ([addressID] => 15804 [customerID] => 10 [loanID] => [address1] => 6 Road [address2] => [address3] => [town] => Their Town [county] => Their County [postCode] => Their postCode [reason] => [current] => 1 [timestamp] => 2013-03-13 14:41:39) [1] => Array ([addressID] => 10 [customerID] => 10 [loanID] => [address1] => 21A Road [address2] => [address3] => [town] => Their 2nd Town [county] => Their 2nd County [postCode] => Their 2nd postCode [reason] => [current] => 0 [timestamp] => 2013-03-13 14:41:39)) 

我有問題,但通過循環和使用陣列信息的陣列的addresses.responseText。

new Ajax.Request('includes/ajax.php', 
     { 
      method:'post', 
      parameters: {addCustID: customerID}, 
      onSuccess: function(addresses){ 

      document.write(addresses.responseText); 

       for (var i in addresses) 
       { 

        if(i == "responseText") 
        {       
         addressExpander.addEntry(addresses[i]); 
        } 
       } 
      }, 
      onFailure: function(){ alert('Something went wrong...') } 
     }); 

我想運行addressExpander.addEntry(addresses[i]);爲每個地址,但只顯示一次,而不是爲每個地址。

我試過循環addresses.responseTextif(i == "responseText")循環,但它什麼也沒做。

我正在使用Prototype,它已經在頁面中使用了。

+0

變化'如果(我== 「的responseText」)''爲IF(地址[i] ==「responseText」)'否則你會比較索引而不是變量的實際值。 –

+0

謝謝,雖然我做了,現在addressExpander.addEntry(地址[我]);根本不運行 – swdee

+0

這意味着'addresses'中包含的值都不包含「」responseText「'的值。 –

回答

0

看起來你現在遇到的問題是PHP arraysJavascript arrays之間存在相當大的差異。

爲了彌補這些差異,我們的霸主創建了全能的JSON格式,這有助於實現語言間數據結構的共享。呼應你的PHP響應之前,使用json_encode像這樣:

echo json_encode($your_php_arr); 

你的JS代碼應該可以不用做任何修改工作。如果沒有,試試你的onSuccess回調中添加一個JSON.parse

var your_js_arr = JSON.parse(addresses.responseText); 

for (var i in your_js_arr) 
{    
    addressExpander.addEntry(your_js_arr[i]); 
} 
+0

謝謝,我得到了2個地址塊,這是很好的,但也有37個空白塊。 – swdee

+0

它循環39次而不是2 – swdee

+0

Wierd,因爲我的PHP數組產生2個地址,如我的原始示例 – swdee

0

假設這一行:

document.write(addresses.responseText); 

是真實生產您發佈的輸出的一個,你打印出地址.responseText和它的地址數組。

正如你在你的答案說,通過它的外觀,你通過addresses.responseText,而不是需要循環:

for (var i=0;i<addresses.responseText.length;i++) 
{  
    addressExpander.addEntry(addresses.responseText[i]); 
} 
+0

我確實嘗試過,它循環了大約50次! – swdee

+0

我感謝您的幫助 – swdee