我正在使用jQuery,我需要处理在AJAX对象之外的AJAX调用期间收集的数据:
function getData(yt_url){
$.ajax
({
type: "GET",
url: yt_url,
dataType:"jsonp",success: function(response){
// Return response here //
},error:function (request, status, error) {alert(status);}
});}
我想调用函数getData
并在AJAX成功函数中接收响应对象。
我尝试添加一些回报,当然我意识到它是一个对象。
答案 0 :(得分:8)
AJAX是异步的,这基本上意味着它不会阻止脚本的执行(这很好,因为你的网站在加载时不会冻结)。
return
像你一样的值是同步的,这与AJAX不兼容。
一种解决方案是将回调函数传递给getData
,当AJAX请求完成时调用该函数:
function getData(yt_url, callback) {
$.ajax({
type: "GET",
url: yt_url,
dataType: "jsonp",
success: callback,
error: function(request, status, error) {
alert(status);
}
});
}
然后你可以像这样使用它:
getData('http://www.example.com/', function(response) {
alert('The response was: ' + response);
});
答案 1 :(得分:1)
您可以尝试这样的事情 - 添加一个存储ajax调用结果的全局变量,例如
var ajaxResult = null;
将ajax的 async 属性设置为 false ,然后编写如下内容:
var ajaxResult = null;
function getData(yt_url){
$.ajax
({
type: "GET",
url: yt_url,
dataType:"jsonp",
async: false,
success: function(response){
ajaxResult = response;
},error:function (request, status, error)
});
}
的getData(yt_url); //调用函数来尝试获取结果 if(ajaxResult!= null){//如果我们在ajax调用期间得到了一些结果
// do something with the result
}
答案 2 :(得分:1)
由于AJAX是异步的,因此您应该重构代码以在回调函数中接收数据。只要请求完成,您就可以继续处理您想要处理的数据。一个例子:
$.ajax {
type: "GET",
url: url,
dataType:"jsonp",
success: success,
error: error
};
function success(data) {
// continue your work here.
}
function error(request, status, error) {
// handle any errors here.
}
我不建议使用async: false
,因为它会冻结浏览器,直到它完成执行请求为止,而一般情况下,您可能希望它在处理代码时保持响应。
答案 3 :(得分:0)
默认情况下,jquery ajax是异步的。使用async:false来禁用它。
function getData(yt_url){
var data;
$.ajax
({
type: "GET",
async: false,
url: yt_url,
dataType:"jsonp",success: function(response){
// Return response here //
// init data variable
},error:function (request, status, error) {alert(status);}
});
return data;
}
答案 4 :(得分:0)
我不知道这适合你们中的任何人,但我在我的案例中做的是,我将响应数据存储在" localSotrage"浏览器和后来使用的那个" localSotrage"其他常用的javascript函数中的数据!!如果它符合您的目的,请尝试一下!!
另请告诉我,如果这种做法有一些负面影响!!