3

jQueryのgetjsonメソッドを使用して次のコードがあります

function Share(){
var title = 'Hello';
var description = 'hi description';
var url = "www.facebook.com"

$.getJSON("http://getTitle/1", function(data){
        title = data.Name;
});
callShare(title,description,url,imageUrl);
}


function callShare(title,description,url,imageUrl){
window.open(
        'http://www.facebook.com/sharer.php?s=100&p[title]='+title+'&p[summary]='+description+' &p[url]='+url+'&p[images][0]='+imageUrl+'','facebook-share-dialog',
        'width=626,height=436')}

ただし、getJson メソッドの実行が完了する前に、メソッドの実行が完了し、callShare 関数を実行しているようです。ここでいくつかの助けが必要です。ここで質問が重複している可能性があることを理解しています。申し訳ありませんが、ここでは適用できません。

ありがとう

4

3 に答える 3

3
$.getJSON("http://getTitle/1", function(data){
        title = data.Name;
        callShare(title,description,url,imageUrl);
});

非同期関数$.getJson()であることは、応答を待たずに次の行を実行します。
サーバーから応答を受信した後に何かをしたい場合は、それを成功関数に入れます。コードで述べたように。

エラー時またはリクエストを送信する前にコードを実行したい場合。$.ajax()代わりに使用

于 2013-09-20T05:21:52.270 に答える
0

$.getJSONの省略形です$.ajax。他の人が指摘したように、それは別のスレッド(種類)で実行される呼び出しであり、残りのコードは結果asyncを気にせずに実行を続けます。JSON

したがって、呼び出しが成功successしたときに呼び出される関数を追加できます。asyncあなたも使うことができます$.ajax

$.ajax({
  dataType: "json",
  url: url,
  data: data,
  success: callShare(title,description,url,imageUrl),
  error: alert('error');
});

$.ajax起こっていることをより明確にするために使用します。

于 2013-09-20T06:05:09.750 に答える
0

質問はParvによって回答されていますが、ここにいくつかの説明があります

まず、そのようなシナリオで関数を呼び出す正しい方法

$.getJSON("http://getTitle/1", function(data){
     title = data.Name;
     callShare(title,description,url,imageUrl);
});

今、問題はなぜですか?

$.getJSONメソッド、つまり非同期の拡張である$.ajaxため、ブラウザは次のコード行に移動することでリクエストが完了するのを待つことを期待している$.getJSONため、ユーザーはリクエストが完了するのを待ってブラウザをロックして動けなくなります。

その場合の解決策は何ですか?

このような非同期リクエストには、コールバックsuccessful failedと呼ばれる特別なメソッドが 1 つまたは 2 つあるため、必要なのは、リクエストまたはリクエストの後に呼び出す必要があるコールバックでそのようなメソッドを呼び出すことだけですcomplete。上記のリンクで詳細を確認できます。

于 2013-09-20T05:27:10.910 に答える