我使用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函数。需要一些帮助。我知道这里可能有重复的问题而且我很抱歉,但我无法在此处申请。
由于
答案 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
,因为它可以更清晰地了解正在发生的事情。