【问题标题】:Ajax PHP/Javascript arrayAjax PHP/Javascript 数组
【发布时间】:2013-08-20 14:26:09
【问题描述】:

我通过 Ajax 使用 PHP 返回一个客户地址数组(作为地址返回)。 我 document.write 完美显示数组的addresses.responseText

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 ) )

我在循环和使用数组信息时遇到了问题。

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]);,但它只显示一次,而不是每个地址。​​

我尝试在if(i == "responseText") 循环中循环通过addresses.responseText,但它没有做任何事情。

顺便说一下,我正在使用Prototype,它已经在页面中使用了。

【问题讨论】:

  • 将 if(i == "responseText") 更改为 if(addresses[i] == "responseText") 否则您将比较索引而不是变量的实际值。
  • 谢谢,虽然我这样做了,现在 addressExpander.addEntry(addresses[i]);根本不运行
  • 这意味着addresses 中包含的值都不包含"responseText" 的值。

标签: php javascript ajax arrays prototype


【解决方案1】:

您遇到的问题似乎是PHP arrays 和Javascript 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]);
}

【讨论】:

  • 谢谢,我得到了想要的2个地址块,这很好,但之后也产生了37个空白。
  • 循环 39 次而不是 2 次​​span>
  • 奇怪,因为我的 php 数组会产生 2 个地址,就像我原来的例子一样
  • 解决了,我加了 'if (your_js_arr[i]['address1']) addressExpander.addEntry(your_js_arr[i]);'
【解决方案2】:

假设这一行:

document.write(addresses.responseText);

是产生您发布的输出的那个,您打印出addresses.responseText,它是地址数组。

正如您在回答中所说,从外观上看,您需要遍历addresses.responseText:

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

【讨论】:

  • 我确实试过了,它循环了大约 50 次!
  • 感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-11
  • 2013-10-03
  • 2021-02-10
  • 2016-10-14
  • 2012-08-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多