Javascript 方法在$.getJson完成运行之前结束
我使用jQUery的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
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');
});