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 呼び出しが完了する前に次の一連のステートメント ( "// my validation is done below " という行の下のコード内) が既に実行されていることです。

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 に答える