gpt4 book ai didi

javascript - JSON 请求在 jQuery Each 函数中无法正常工作

转载 作者:行者123 更新时间:2023-12-01 03:28:58 25 4
gpt4 key购买 nike

如果包含 .event 类的每个 div 的值已更改,我将使用下面的代码来检索给定位置的纬度和经度。

我遇到的问题是这段代码只产生两个结果:

  • 从一个 JSON 请求返回的值用于每个 latlon 变量
  • 变量 latlon 保持完全相同,就好像它们保持不变,因此 JSON 值不会被替换。

下面是我正在使用的代码:

    $(".button").click(function(){

data = "";
$(".event").each(function(){

original = $(this).find(".address").data("original");
location = $(this).find(".address").html();
lat = $(this).find(".lat").html();
lon = $(this).find(".lon").html();

if (original !== location) {

$.getJSON( "http://nominatim.openstreetmap.org/search?q="+location+"&format=json&polygon=1&addressdetails=1", function(result) {
lat = result[0].lat;
lon = result[0].lon;
});

}

data = data + randomNumber() + ": " + lat + " " + lon + ",";

});

$(".data").val(data);
$(".form").submit();

});

变量data将包含每个包含类event的div的latlon。除非用户更改了地址,否则这些值将保持不变,此时将通过 JSON 请求再次检索它们。

然后应提交表单。

我该如何解决这个问题?谢谢

最佳答案

$.getJSON 是异步的,您无法在回调函数之外引用结果。并且在所有 AJAX 请求完成之前您不想提交表单。

$.getJSON() 返回一个Deferred。您可以将它们全部创建一个数组,并使用 $.when() 来等待它们。

$(".button").click(function() {

var promises = [];
var data = "";
$(".event").each(function() {

var original = $(this).find(".address").data("original");
var location = $(this).find(".address").html();
var lat = $(this).find(".lat").html();
var lon = $(this).find(".lon").html();

if (original !== location) {
promises.push($.getJSON("http://nominatim.openstreetmap.org/search?q=" + location + "&format=json&polygon=1&addressdetails=1", function(result) {
var lat = result[0].lat;
var lon = result[0].lon;
data += randomNumber() + ": " + lat + " " + lon + ",";
}));

} else {
data += randomNumber() + ": " + lat + " " + lon + ",";
}

});
$.when.apply($, promises).done(function() {

$(".data").val(data);
$(".form").submit();
});

});

请注意,data 中值的顺序是不可预测的,因为 AJAX 请求不一定按照发送时的顺序返回。

您还应该养成使用 var(或 ES6 中的 let)将变量声明为本地变量的习惯。

关于javascript - JSON 请求在 jQuery Each 函数中无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44641550/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com