方法在$ .getJson完成运行之前结束

时间:2013-09-20 05:20:20

标签: javascript jquery

我使用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函数。需要一些帮助。我知道这里可能有重复的问题而且我很抱歉,但我无法在此处申请。

由于

3 个答案:

答案 0 :(得分:3)

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

作为异步函数$.getJson()不等待响应并执行下一行。
如果您想在从服务器收到响应后做一些事情,请将其放入成功函数中。就像我在代码中提到的那样。

如果您还想在错误时或在发送请求之前执行代码。请改用$.ajax()

答案 1 :(得分:0)

虽然问题已由Parv回答,但这里有一些解释

首先,在这种情景中调用函数的正确方法

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

现在问题是为什么?

$.getJSON$.ajax方法的扩展,即异步,因此浏览器期望$.getJSON等待请求完成,然后转到下一行代码,以便用户不要被锁定浏览器等待请求完成。

那么现在的解决方案是什么?

此类异步请求有一些或多个称为call backs的特殊方法,因此您只需要在successful {{1}之后调用的那些回调中调用此类方法}或failed请求,您可以在上面的链接中找到更多内容

答案 2 :(得分: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,因为它可以更清晰地了解正在发生的事情。