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的特殊方法,因此您只需在请求的or之后需要调用的那些回调中调用此类方法complete,您将在上面的链接中找到更多信息

于 2013-09-20T05:27:10.910 回答