0

JSスコープに頭を悩ませるのにいくつか問題があります。async:falseを有効にしたので、AJAXではないことはわかっていますが、 jQueryPromiseを機能させることができませんでした。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/

私はテストしていませんが、データ型としてjsonpを使用しているため、非同期が「true」に変更されている可能性があります。したがって、データを読み取ろうとする前に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 に答える