除非我使用alert(),否则Ajax请求不会工作

时间:2014-06-24 08:31:11

标签: javascript jquery ajax

我已经花了好几个小时才能让它发挥作用,但它并没有让步;我有以下代码:

var text = "";
function getText(c1, c2)
{
    url = "http://en.wikipedia.org/w/api.php?format=json&action=query&titles=" + c1 + "-" + c2 + "_relations&prop=revisions&rvprop=content"
    $.ajax({
         type: "GET",
         dataType: "jsonp",
         async: false,
         url: url,
         success: function (data) {
                var obj = (data.query.pages );
                var keys = [];
                for(var k in obj) keys.push(k);
                if (keys[0] == -1) { 
                    //Link doesnt exist
                    text = "-1";            
                    return text;
                }
                //Link Exists
                else {
                        link = "http://en.wikipedia.org/wiki/" + c1 + "-" + c2 + "_relations"
                        text = c1 + "-" + c2 + " Relations"                     
                        return text;
                }
            }

    });
    return text;
}   

var a = (getText(country1, country2))
alert(text);
alert(a);

我正在制作ajax请求;一个简单的查询,以查看维基是否在任何给定的国家之间有一个页面。 如果我在内部使用alert,它工作正常,并在text变量中返回正确的数据。但是,当在外部调用getText函数时,text变量始终为空。我已经尝试了所有我能想到的东西,包括让应用程序睡了一段时间,但即使这样也行不通。我知道async不能从ajax 1.8开始工作,但是到底有没有呢?

提前致谢。

1 个答案:

答案 0 :(得分:1)

这是因为ajax的异步行为。你不能像这样从ajax返回值。因为该功能不会等待成功事件发生。

当您在该功能中放置警报时,可能会在用户单击警报之前发生成功事件。这就是它返回价值的原因。否则它不会返回值。

在ajax调用中使用async : false不是一个好习惯。它会冻结浏览器。

好的做法是使用返回的数据调用ajax成功的方法,然后在函数内部对该数据进行操作。