从PHP数组到通过ajax发送的jQuery数组

时间:2014-08-22 17:04:21

标签: php jquery ajax

现在这是一个非常简单的问题,但由于我缺乏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的使用是完全怪异的..

4 个答案:

答案 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调用..