Ajax同步调用返回undefined

时间:2014-09-11 11:34:11

标签: javascript jquery ajax web-scraping

我正在尝试编写一个简单的javascript函数来使用ajax和yql检索网页内容。这是功能:

function retrieveDataGet(url){
    var encodedUrl = encodeURI(url);
    var address = "https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%3D%22"+encodedUrl+"%2Fcategory%2Fnews%2F%22&diagnostics=true";
    console.log("Call : "+address+"\n");
    $.ajax({
        url: address,
        method: 'GET',
        async: false
    }).done(function(data) {
    console.log(data);//Here I can see the webpage data
    return data;
    }).error(function(err){
        return "Error";
    }).fail(function(){
        return "Fail";
    });
}

现在,当我调用该函数时,我可以通过“console.log(data)”指令看到控制台上的数据,但是当我尝试这段代码时:

var data = retrieveDataGet("http://www.wikipedia.org/");
console.log(data);//here data is undefined

我得到“未定义”。

我哪里错了?

2 个答案:

答案 0 :(得分:0)

你不能这样做:

这样做:

var MyData;

retrieveDataGet("http://www.wikipedia.org/");

console.log(MyData);

功能上的一点修改:

function retrieveDataGet(url){
    var encodedUrl = encodeURI(url);
    var address = "https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%3D%22"+encodedUrl+"%2Fcategory%2Fnews%2F%22&diagnostics=true";
    console.log("Call : "+address+"\n");
    $.ajax({
          url: address,
          method: 'GET',
          async: false
        }).done(function(data) {
            console.log(data);//Here I can see the webpage data
            MyData = data;
        }).error(function(err){
                return "Error";
            }).fail(function(){
                return "Fail";
            });
}

答案 1 :(得分:-1)

function retrieveDataGet(url){
var returnData = "";
    var encodedUrl = encodeURI(url);
    var address = "https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%3D%22"+encodedUrl+"%2Fcategory%2Fnews%2F%22&diagnostics=true";
    console.log("Call : "+address+"\n");
    $.ajax({
          url: address,
          method: 'GET',
          async: false
        }).success(function(data) {
            console.log(data);//Here I can see the webpage data
            returnData  = data;
        }).error(function(err){
               returnData  = "Error";
            }).fail(function(){
                  returnData  = "Fail";
            });
return returnData ;
}

检查一下。 请注意 - 最好为函数设置一个return语句。 在Ajax中,返回成功回调数据。