2014-09-11 97 views
0

我试图编写一个简单的javascript函数来使用ajax和yql检索网页内容。这里的功能:Ajax同步调用返回undefined

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(数据)”印在控制台上的数据,但是当我尝试此代码:

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

我得到“未定义”。

我在哪里错了?

回答

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"; 
      }); 
} 
+0

谢谢,解决了。为什么我必须这样做,我不能从我的函数返回值?这是一个JavaScript语言相关的问题? – user3098549 2014-09-11 12:08:45

+1

问题是你不能从ajax函数值返回 – 2014-09-11 12:09:50

-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中,返回成功回调中的数据。