这里有一点问题。我查看了与我的问题相关的不同答案,但似乎无法使其正常工作。
我的网页上有这样的链接:
<a href="#" onclick="showData(id)">View</a>
这里是javascript
var queryResult;
function getData(id, callbackfn){
$.ajax({
type:"POST",
url:"http://url/to/query",
data:{id: id },
success: function(data){
callbackfn(data);
},
error: function(){
return "err";
}
});
}
function showData(id){
getData(id, Callback);
if(queryResult)
{
alert("Yahoooooo !");
}
else
{
alert("Nope !!!");
}
}
function Callback(data){
queryResult = data.length;
}
第一次点击时,链接会启动警告框,我得到了#34; Nope !!!&#34;但任何后续点击都会显示一个&#34; Yahoooooo!&#34; 如果我重新加载页面然后再次#34; Nope !!!&#34;这是第一次,之后很好。所以看来queryResult在第一次调用时是未定义的,但只是第一次调用。有什么想法吗?
感谢名单
答案 0 :(得分:0)
将您的控件置于Callback
功能
function Callback(data){
queryResult = data.length;
if(queryResult)
{
alert("Yahoooooo !");
}
else
{
alert("Nope !!!");
}
}
答案 1 :(得分:0)
您正在使用.ajax 默认情况下,此方法是异步的。
所以你打电话给&#34; getData&#34;然后加载您的数据。 加载时,检查queryResult是否存在
然后加载数据并设置全局标志
(目前您正在检查先前的请求是否成功)
答案 2 :(得分:0)
ajax调用执行异步。因此,当您调用getData()时,方法调用立即返回(并且ajax调用正在另一个线程中执行)。这意味着当您第一次点击该链接时,queryresult
中将没有任何内容,因为ajax调用在您点击if
块之前没有时间完成,但随后的时间点(可能),假设在下次点击链接之前呼叫已经完成。
如果你有任何逻辑,比如if
块,它取决于从ajax调用返回的数据,你必须将它包含在你的回调函数中(或从中调用它)。
所以在这种情况下你必须移动块:
if(queryResult)
{
alert("Yahoooooo !");
}
else
{
alert("Nope !!!");
}
从getData到Callback函数。