-1

我通过 $.getJSON 从我的网络服务器获得 json 响应。这是回应:

[{"id":"1","latitude":"28.63","longitude":"77.21","price":"0"},{"id":"2","latitude":"28.71","longitude":"77.19","price":"100"}]

这是我将此响应转换为数组的 javascript 代码:

var i = 0;
var vehicleId = $('#selectVehicle option:selected').val();
$.getJSON('getFillingDetails.php', {id : vehicleId}, function(data){
    var lat = [];
    var lon = [];
    var price = [];
    $.each(data, function(key, value){
        lat.push(value.latitude);
        lon.push(value.longitude);
        price.push(value.price);
        i++;
    });
});
console.log(i);

但是当我在控制台中看到 i 的值时,它并没有改变。它仍然是 0。这意味着里面没有发生任何事情$.each()。我对javascript完全陌生。任何帮助将不胜感激。

4

4 回答 4

1

试试这个:

var i = 0;
var vehicleId = $('#selectVehicle option:selected').val();
$.getJSON('getFillingDetails.php', {id : vehicleId}, function(data){
    var lat = [];
    var lon = [];
    var price = [];
    $.each(data, function (i, item) {
        $.each(item, function(key, value){
            lat.push(value.latitude);
            lon.push(value.longitude);
            price.push(value.price);
            i++;
        });
    });
    console.log(i);
});

您的主要问题是,因为 AJAX 是 A(同步)J(avascript)A(nd)X(ML),请注意asynchronous,您的 console.log(i) 在请求完成之前被触发。我注意到的另一个问题是你试图只循环一个对象。虽然您的 JSON 以一个也必须循环的数组开头。

只是一个建议。本机循环非常简单并且运行速度更快。我建议不要使用$.each

var i = 0;
var vehicleId = $('#selectVehicle option:selected').val();
$.getJSON('getFillingDetails.php', {id : vehicleId}, function(data){
    var lat = [];
    var lon = [];
    var price = [];
    for (var i = 0, item = data[i]; i < data.length; i++) {
        for (var key in item) {
            var value = key[item];
            lat.push(value.latitude);
            lon.push(value.longitude);
            price.push(value.price);
            i++;
        };
    };
    console.log(i);
});

现在,我意识到 jQuery 是为了让你的工作更轻松。但我认为这只是导致开发人员变得懒惰。我认为 jQuery 很棒。$.each但是一旦我意识到本机循环很容易c,我就停止使用了:

于 2013-07-17T05:52:31.133 回答
0

在 javascript 中使用异步函数有时会让人感到困惑,这就是为什么

示例

var result = 'pending';
$.ajax({
  url: 'something.php',
  success: function() {
    result = 'success';
  }
});

现在如果我们想在这里使用结果,我们不会得到一个好的结果

console.log(result); // 'pending'

所以相反,我认为你最好在这样的那个上调用“函数”

var makeArray = function( data ) {
    var i = 0,
        vehicleId = $('#selectVehicle option:selected').val(),
        lat = [], lon = [], price = [];

    $.each(data, function(key, value){
        lat.push(value.latitude);
        lon.push(value.longitude);
        price.push(value.price);
        i++;
    });
    console.log(i);
}; 

$.getJSON('getFillingDetails.php', {id : vehicleId}, function(data){
    makeArray( data );
});
于 2013-07-17T06:15:37.353 回答
0

试试这个代码

var i = 0;
var vehicleId = $('#selectVehicle option:selected').val();
var jsonData;
$.getJSON('getFillingDetails.php', {id : vehicleId}, function(data){

    jsonData = data;
});
var lat = [];
    var lon = [];
    var price = [];
$.each(jsonData, function(key, value){
        lat.push(value.latitude);
        lon.push(value.longitude);
        price.push(value.price);
        i++;
    });
console.log(i);
于 2013-07-17T05:58:54.953 回答
-1

只需使用索引:

var data = [{"id":"1","latitude":"28.63","longitude":"77.21","price":"0"},
            {"id":"2","latitude":"28.71","longitude":"77.19","price":"100"},
            {"id":"2","latitude":"28.71","longitude":"77.19","price":"100"}];
var i;
var lat = [];
var lon = [];
var price = [];

$.each(data, function(index, value){
    lat.push(value.latitude);
    lon.push(value.longitude);
    price.push(value.price);
    i = index;
});

console.log(i);

看看这个小提琴,我认为它应该做你想做的事

http://jsfiddle.net/vmy3b/3/

于 2013-07-17T05:58:41.633 回答