jQuery AJAX - 范围和从成功函数返回数据

时间:2013-01-17 12:37:43

标签: jquery ajax

在JS范围内遇到一些问题。我知道它不是AJAX,因为我已经变为异步:false,但我无法让jQuery Promise为我工作。我真的无法理解为什么apiData返回undefined。

 var url = 'http://www.myjson';      

    /* The API call */
    function getData(url) {

        var text;

        result = $.ajax({
            type: 'GET',
            url: url,
            async: false,
            jsonp: 'callback',
            dataType: 'jsonp',
            success: function(data)
            {
                text = data;
                 //console logging here returns text data fine
                return text;
            }

         });

        return text;
    }
    apiData = getData(url);
    console.log(apiData);

    //returns undefined for apiData

2 个答案:

答案 0 :(得分:3)

看起来跨域请求不允许进行同步调用。

根据jQuery文档:

“跨域请求和dataType:”jsonp“请求不支持同步操作”

http://api.jquery.com/jQuery.ajax/

我还没有测试过,但是在您的情况下,async可能会更改为“true”,因为您使用的是jsonp作为数据类型。因此,在尝试读取数据之前,尚未调用onSuccess处理程序。

答案 1 :(得分:0)

试试这个

var url = 'http://www.myjson';      

/* The API call */
function getData(url) {

    var text;

    result = $.ajax({
        type: 'GET',
        url: url,
        async: false,
        jsonp: 'callback',
        dataType: 'json',
        success: function(data)
        {
            text = data;
             //console logging here returns text data fine
            return text;
        }

     });
}
apiData = getData(url);
console.log(apiData);

//returns undefined for apiData