与以下查询不同,首先ajax查询返回undefined

时间:2016-06-17 10:41:15

标签: javascript jquery ajax

这里有一点问题。我查看了与我的问题相关的不同答案,但似乎无法使其正常工作。

我的网页上有这样的链接:

<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在第一次调用时是未定义的,但只是第一次调用。有什么想法吗?

感谢名单

3 个答案:

答案 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函数。