5

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

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

4

5 回答 5

10

AJAX 是异步的,这基本上意味着它不会阻止脚本的执行(这很好,因为您的网站在加载时不会冻结)。

return像您正在执行的值是同步的,这与 AJAX 不兼容。

一种解决方案是将回调函数传递给getDataAJAX 请求完成时调用的回调函数:

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);
});
于 2012-10-27T08:14:29.993 回答
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)           
});

}

获取数据(yt_url);// 调用函数来尝试获取结果 if(ajaxResult != null){ // 如果我们在 ajax 调用期间得到了一些结果

    // do something with the result

}

于 2012-10-27T08:14:36.807 回答
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,因为它会冻结浏览器,直到它完成执行您的请求,而通常您可能希望它在处理您的代码时保持响应。

于 2012-10-27T08:18:57.820 回答
1

我不知道这适合你们中的任何人,但我所做的是,我将响应数据存储在浏览器的“localSotrage”中,然后在其他常用的 javascript 函数中使用该“localSotrage”数据!如果它满足您的目的,请尝试一下!

也让我知道,如果这种方法有一些负面影响!

于 2017-11-09T07:17:08.493 回答
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;
   }
于 2012-10-27T08:12:37.890 回答