从PHP到JavaScript通过AJAX传递数组

3
我需要从一个php脚本生成一个数组。在数据库中,每个用户都有经纬度。 我使用以下代码从数据库获取这些值(file.php):
$query = "SELECT Latitude, Longitude FROM USERS";
$result=mysql_query($query);
$array=array();
while ($data = mysql_fetch_array($result)) {
    $array[]=$data['Latitude'];
    $array[]=$data['Longitude'];
}

echo $array;

我使用以下代码通过ajax进行调用:

$.post('./file.php',
     function( result ){    
         alert(result);
     });

即使在PHP脚本中数组是正确的(如果我打印数组[25],我会得到正确的值),但在JavaScript中我得到“未定义”。 如何以正确的方式获取数组? 谢谢!
编辑:在使用json_encode($array)在PHP和JSON.parse(result)中编码后,在javascript中似乎不起作用。 在控制台中我有数组,但我无法访问其值。(Array [0]给了我“未定义”)。

如果您的PHP脚本正常运行并输出任何内容,那么您在JavaScript中不应该得到“未定义”。 - Amberlamps
3个回答

20

使用这个

echo json_encode($array);

在服务器端

var arr=JSON.parse(result);

在客户端上


如果我执行arr[0],即使在解析后,结果的警报给出了正确的数组,我仍然会得到“未定义”。 - user1903898
登录控制台,接收结果并将其粘贴在此处。 - Ruslan Polutsygan
如果我在控制台中输入arr,我会得到:Array[1164] [0 … 99] 0: "45.4655" 1: "9.18652" 2: "45.4655" 3: "9.18652" 4: "45.4655" 5: "9.18652" 6: "45.4655" 7: "9.18652" 8: "45.4655" 9: "9.18652" 10: "45.4655" 等等。 - user1903898
@user1903898:不确定,但看起来服务器返回的是数组的数组。服务器端的$array并不是你想象的那样。尝试传递一些测试数据到客户端,例如 echo json_encode(array('item 0', 'item 1', 'item 2', 'item 3'))。然后在客户端尝试记录arr[0]。如果这样可以工作,那么你就在错误的地方寻找错误了。 - Ruslan Polutsygan

1
如Ruslan Polutsygan所提到的,您可以使用:

echo json_encode($array);

在 PHP 方面。

在 JavaScript 方面,您只需将数据类型添加到 $.post() 函数中:

$.post(
  './file.php',
  function( result ){    
    console.log(result);
  },
  'json'
);

结果参数是解析后的JSON数据。

你也可以在PHP脚本中设置正确的Content-Type。然后,jQuery应该会自动解析从你的PHP脚本返回的JSON数据:

header('Content-type: application/json');

See
http://api.jquery.com/jQuery.post/
http://de3.php.net/json_encode


0

您需要将php数组转换为json,尝试使用以下代码:

echo json_encode($array);

jQuery应该能够看到返回的json并自动创建一个javascript对象。

$.post('./file.php', function(result)
{    
     $.each(result, function()
     {
         console.log(this.Latitude + ":" + this.Longitude);
     });
});

jQuery会为您解析吗? - Amberlamps

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接