0

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

 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
4

2 回答 2

3

跨域请求似乎不允许同步调用。

根据 jQuery 文档:

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

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

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

于 2013-01-17T12:50:39.580 回答
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
于 2013-01-17T12:41:13.477 回答