jquery处理ajax对象之外的ajax响应

时间:2012-10-27 08:02:02

标签: jquery ajax

我正在使用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成功函数中接收响应对象。

我尝试添加一些回报,当然我意识到它是一个对象。

5 个答案:

答案 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函数中的数据!!如果它符合您的目的,请尝试一下!!

另请告诉我,如果这种做法有一些负面影响!!