Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 方法在$.getJson完成运行之前结束_Javascript_Jquery - Fatal编程技术网

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

Javascript 方法在$.getJson完成运行之前结束,javascript,jquery,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

我使用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函数。这里需要一些帮助。我理解这里可能有重复的问题,我很抱歉,但我不能在这里应用它

谢谢

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


如果您还希望在出错时或发送请求之前执行代码。使用
$.ajax()
代替虽然问题已经由回答,但这里有一些解释

首先,在这样的senarios中调用函数的正确方法

$.getJSON("http://getTitle/1", function(data){
     title = data.Name;
     callShare(title,description,url,imageUrl);
});
现在的问题是为什么

$.getJSON
$.ajax
方法的一个扩展,即异步,因此浏览器期望在
$之前等待请求完成。getJSON
他们继续下一行代码,这样用户就不会被锁定浏览器卡住,等待请求完成

那么,这种情况下的解决方案是什么


此类异步请求调用了一个或两个特殊方法,因此您只需在请求的
成功
失败
完成
后需要调用的回调中调用此类方法,您将在上面的链接中找到更多内容。getJSON
只是
$的缩写。ajax
。正如其他人所指出的,这是一个
async
调用,它将在一个单独的线程(某种类型)中运行,其余代码将继续执行,而不必担心
JSON
结果

因此,您可以添加一个
success
函数,该函数将在
async
调用成功时调用。您也可以使用
$.ajax

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

我使用
$.ajax
,因为它可以更清楚地了解正在发生的事情

ajax是异步的,因此如果希望在调用完成时运行代码,则需要使用回调。请告诉我们您是如何尝试应用这些解决方案的。这是有道理的,但是如果我必须创建多个getJson呢calls@LionelKoh然后将对
$.getJSON
的调用封装在内部,一旦所有请求完成,它就会执行回调
$.ajax({
  dataType: "json",
  url: url,
  data: data,
  success: callShare(title,description,url,imageUrl),
  error: alert('error');
});