现在这是一个非常简单的问题,但由于我缺乏jQuery知识,我不得不问这个......
在JS中我有这个变量,它是Google Maps的标记数据数组:
var Locations = {
1: {
info: '1. New Random info and new position',
lat: -37,
lng: 124.9634
},
2: {
info: '2. New Random info and new position',
lat: 70,
lng: 14.5144
},
3: {
info: '3. New Random info',
lat: 30,
lng: 24.5144
},
4: {
info: '4. New Random info',
lat: 34,
lng: 26.5144
},
5: {
info: '5. 55555. Added',
lat: -37,
lng: 0
}
};
然后我有一个ajax调用,用PHP检索一个新的位置数组。 PHP看起来像这个例子(请注意,我回复了由|分隔的3个数据:
$arrayccordinates = array();
$countercords = 0;
echo 'Data1 |';
echo 'Data2 |';
foreach ($results as $result) {
$countercords = $countercords + 1;
$arrayccordinates[] = array( $countercords => array( 'info' => $infos, 'lat' => $latdata, 'lng' => $lngdata )
);
}
echo json_encode($arrayccordinates);
这是ajax调用。在这里,我将3个数据分开,并在arr [2]中找到位置数组。:
//Ajax code
var interval = 5000; // 5000 ms = 5 secs
function doAjax() {
jQuery.ajax({
type: 'POST',
url: '/codes/LiveVisitsStats/postlivecounter.php',
dataType : 'html',
success: function (data) {
var arr = data.split('|');
jQuery('#counterint').html(arr[0]);
jQuery('#extrainfoscounter').html(arr[1]);
jQuery('#testdiv').html(arr[2]);
var newlocations = arr[2];
},
complete: function (data) {
// Schedule the next
setTimeout(doAjax, interval);
}
});
}
现在,我已对此进行了测试,似乎无法正常工作。存储在“newlocations”变量中的PHP数组似乎不能用作原始的“Locations”变量。 我真的不知道我做错了什么,虽然我怀疑我对json_encode的使用是完全怪异的..
答案 0 :(得分:1)
您将数据类型设置为html,但发送JSON。如果设置datatype: json
,则jquery会将json解码为本机JS数组。
此外,由于您正在从PHP输出JSON,因此在字符串中几乎肯定不会有任何|
个字符要分割。
答案 1 :(得分:1)
正如我在评论中提到的:如果你将dataType从html更改为json,你就可以像使用javascript中的数组对象一样使用success函数中的参数。
答案 2 :(得分:0)
你的"阵列"看起来像这样:
var Locations = {
1: {
info: '1. New Random info and new position',
lat: -37,
lng: 124.9634
},
2: {
info: '2. New Random info and new position',
lat: 70,
lng: 14.5144
},
3: {
info: '3. New Random info',
lat: 30,
...
不是数组,而是指向对象
的属性为1,2,3等的对象您的php json_encode
将返回:
[
{ "1": {
info: '1. New Random info and new position',
lat: -37,
lng: 124.9634
}},
{ "2": {
info: '1. New Random info and new position',
lat: -37,
lng: 124.9634
}},
...
这是一个有效的对象数组,它具有指向嵌套对象的属性" 1"," 2"等等 - 非常不同。
更改初始对象的布局(以及访问代码)或不使用json_encode
答案 3 :(得分:0)
感谢Axel Amthor,我想到了这一切。 我只需要改变两件小事。
首先,我需要将PHP代码更改为:
$arrayccordinates = array();
$countercords = 0;
foreach ($results as $result) {
$countercords = $countercords + 1;
$arrayccordinates[$countercords] = array( 'info' => $result->info, 'lat' => $result->lat, 'lng' => $result->lng);
}
echo json_encode($arrayccordinates);
然后我需要稍微修改一下我的Ajax调用:
//Ajax code
var interval = 5000; // 1000 = 1 second, 3000 = 3 seconds
function doAjax() {
jQuery.ajax({
type: 'POST',
url: '/codes/LiveVisitsStats/postlivecounter.php',
dataType: "json",
success: function (data) {
var NewLocation = data;
},
complete: function (data) {
// Schedule the next
setTimeout(doAjax, interval);
}
});
}
setTimeout(doAjax, interval);
当然我需要为其他类型的ajax更新制作单独的ajax调用..