【问题标题】:Multidimensional PHP array to jQuery - Only seeing one result多维 PHP 数组到 jQuery - 只看到一个结果
【发布时间】:2016-06-26 22:47:36
【问题描述】:

我正在尝试使用 PHP 和 jQuery 创建动态搜索结果页面。

PHP 端,调用SELECT 语句,检查是否设置了所有变量,添加我想在客户端使用的HTML,然后将变量放入名为$result 的数组中。

在数据库调用的结果中,我还将longitudelatitude添加到自己的数组中,命名为$pins

然后我创建一个名为$results 的多维数组,并将该数组放在一起,如下所示:

$result = array('listing'=>$listing);
$pins = array('lat'=>$lat1,'lng'=>$lon2); 
$results = array('listing'=>$result,'pins'=>$pins);

echo json_encode($results);


现在,客户端我使用 jquery。我面临的问题是总共应该有2个结果。但是,我看到相同的结果重复了两次(我可以确认它们应该是唯一的)。这是我的 jQuery:

$.ajax({
    url: '/updatedsearch.php',
    type: 'POST',
    data: { 
        q: search, 
        lng: coordinates[0], 
        lat: coordinates[1], 
        },
                    dataType: "json",
                    success: function(data) {
                    if(data == "undefined" || data == null) {
                    console.log("There was no search results or something similar");
                                } else {
                                var pins = [data.pins.lat, data.pins.lng];
                                $.each(data, function(key, val) {
                                    $('#listings').append(data.listing.listing);
                                    console.log(pins);
                                    console.log(data);
                                });
                               }
                            },

这里的一切都正常工作,除了$.each() 运行时,它似乎两次附加相同的数据。

我认为这是因为.append(data.listing.listing);,如果我理解正确,我没有在这里循环遍历数组,我实际上是在引用data.listing.listing[0] - 我理解正确吗?

编辑:现在我的结果出现了两次问题。结果应该只有两个,但总共有四个,看起来好像是重复的。

{"listing":["<div>This contains my HTML</div>"], "pins":"lat":"50.000000","lng":"-1.000000"}}

我已经通过jsonlint 运行了它,但它似乎无效。使用 PHP,我创建了如下数据:

while($listrow = mysqli_fetch_assoc($list)) {
$listing[] = '<div>This contains my HTML</div>';

}

$pins = array("lat"=>$lat1, "lng"=>$lon2);
$results = array('listing'=>$listing, 'pins'=>$pins);


echo json_encode($results);

我是否误解了使用多维数组,从而导致错误?

【问题讨论】:

  • 我想更好地了解您的 $results 的外观。直接调用您的 PHP 脚本,并使用虚拟输入 (q,lng,lat),然后在脚本中执行 print_r($result)print_r($pins)exit ,否则您将执行 echo json_encode(...) .将打印出来的结果添加到您的问题中。
  • @Patrick 感谢您的回复,我已经用更多信息更新了我的问题。
  • 看看我的回答。

标签: php jquery multidimensional-array


【解决方案1】:

您没有在数组中循环是正确的。追加时也没有引用单个数组项。

试试:

$.each(data.listing.listing, function(i, item) {
    $('#listings').append(item);
});

当您执行以下操作时:

$.each(data, function(key, val) {

您正在循环访问data 对象的属性。它有两个属性:listingspins,所以循环执行了两次。

对于循环的每次迭代,您都附加了相同的值 (data.listing.listing),我假设它是一个数组。

相反,我认为您想遍历数组,并将每个项目追加到数组中。


编辑:您在问题顶部显示的 PHP 看起来会像这样生成 JSON:

{
    "listing": { "listing": ["<div>This contains my HTML</div>"] },
    "pins": { "lat":"50.000000","lng":"-1.000000" }
}

但是通过您的编辑,您会显示如下所示的 JSON:

{
    "listing": ["<div>This contains my HTML</div>"],
    "pins": { "lat":"50.000000","lng":"-1.000000" }
}

如果你的 JSON 是这样的,你应该使用:

$.each(data.listing, function(i, item) {

jsfiddle

【讨论】:

  • 折腾了一下,终于成功了,感谢您的帮助和解释,帮助我日后理解!
【解决方案2】:

您似乎打算让您的$.each 循环遍历PHP 中$results['listing'] 中的列表,但它实际上是循环遍历整个$results

为了更好地了解发生了什么,请为 $.each 中的当前项目使用不同的名称。因为您使用data,与您的success 回调的参数使用相同的名称,您使代码更难调试。如果您想循环浏览您的列表,请在 success 回调中执行以下操作:

$.each(data.listing, function(i, result)){
   $('#listings').append(result);
}

您发布的 JSON:

{
    "listing":["<div>This contains my HTML</div>"], 
    "pins":    "lat":"50.000000","lng":"-1.000000"}
}

无效,因为您在 "pins":"lat" 之间缺少一个左括号。应该是

{
    "listing":["<div>This contains my HTML</div>"], 
    "pins":   {"lat":"50.000000","lng":"-1.000000"}
}

【讨论】:

    猜你喜欢
    • 2015-09-15
    • 2011-01-08
    • 1970-01-01
    • 2016-07-11
    • 2012-06-24
    • 2013-02-28
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    相关资源
    最近更新 更多