5

我在我的 javascript 方法中使用下面的json 调用

function go123(){
    var cityName = "";
    var temp = $.getJSON("https://abc.in/api/city?callback=?", args,function (data) {
        if (data.properties.city != null){ 
            cityName = data.properties.city;
            check = true;
        } else {
            cityName = "NaN"
        }
    }); // end of my Json Call.

    // my validation is done below
    if(cityName != "NaN"){
        return false;
    } else {
    // here I except the cityName to not be "" but be some value which  is set as :cityName = data.properties.city;
        return true;
    }
} // end of my function 

现在我面临的问题是,在我的 Json 调用完成之前下一组语句(在“//我的验证在下面完成”行下方的代码中)已经执行。

我想获取在我的 json 调用(cityName)中设置的值,并且只有在调用完成时才一次,然后我只希望执行下一组语句。

请帮助我。任何意见/想法/建议将不胜感激!谢谢。

4

4 回答 4

6

您传递给 $.getJSON() 的函数是函数成功完成时运行的回调。在其他条件相同的情况下,将“其余部分”粘贴在该方法中。如果你不能这样做,你所追求的就是 jQuery Deferred。有关代码,请参见http://www.erichynds.com/jquery/using-deferreds-in-jquery/http://joseoncode.com/2011/09/26/a-walkthrough-jquery-deferred-and-promise/看起来像这样:

var req = $.getJSON('blah', 'de', 'blah');

req.success(function(response){
    // The request is done, and we can do something else
});
于 2012-04-28T08:01:51.077 回答
5

AJAX 调用是异步的。他们不等待答复。它们在后台运行,并在调用后立即执行其后面的代码。因此,getJSON当执行下面的操作时,接收到的数据还没有出现。

您可以将所需的操作放在回调中,以便在接收数据时执行它们:

function go123(callback){
    var temp = $.getJSON("https://abc.in/api/city?callback=?", args,function (data) {
        //execute the callback, passing it the data
        callback(data);
    });
}

//when you call go123, it get's back the result:
function goBefore123(){

    //get our JSON
    go123(function(data){

        //when we get our data, evaluate
        if (data.properties.city != null){

            cityName = data.properties.city;
            check = true;

            alert('executed after returned');
            afterCall();
        } else {
            cityName = "NaN"
        }
    });

    alert('i am executed before anything else');
}

function afterCall(){
    alert('im also executed after');
}
于 2012-04-28T08:05:30.407 回答
3

调用外部url会花费太多时间,等待结果检查下面

var jqxhr = $.getJSON("example.json", function() {
  alert("success");
})
.success(function() { alert("second success"); })
.error(function() { alert("error"); })
.complete(function() { alert("complete"); });

http://api.jquery.com/jQuery.getJSON/

于 2012-04-28T08:07:55.087 回答
-1

。成功

http://api.jquery.com/jQuery.getJSON/

于 2012-04-28T08:01:48.247 回答