0

2 つの別個の .js ファイルがあり、最初の .js ファイルの ajax 呼び出し内で呼び出されるグローバル変数の値を割り当て、citIdその変数を 2 番目の .js ファイルで使用したいと考えています。

コードが長すぎて投稿できないので、私がやろうとしていることの例を示しました。

私の最初の .js ファイルはmain.js次のとおりです。

var citId = "";
$(document).ready(function($) {
var url = some url;

$.ajax({
    type: 'GET',
    url: url,
    jsonpCallback: 'getSBJSON',
    contentType: "application/json",
    dataType: 'jsonp',
    success: function(json) {
                  //Does some stuff

                   urlId = product of some stuff;

        $.ajax({
            type: 'GET',
            url: url + urlId,
            jsonpCallback: 'getSBJSON',
            contentType: "application/json",
            dataType: 'jsonp',
            success: function(json) {

                if (json.length > 0) {
                    citId = urlId;
                    window.open('Citations.html', '_self');
                } else {
                var page = linkBase + urlId;
                window.open(page);
                }  
            },
            error: function(e) {
                console.log(e.message);
            }   
         });  

    });   
    },
    error: function(e) {
        console.log(e.message);
    }
});
});

私の2番目の.jsファイルはcitations.js次のとおりです。

$(document).ready(function($) {

    var itemLnkId = citId;
    $.ajax({
        type: 'GET',
        url: url + citId,
        jsonpCallback: 'getSBJSON',
        contentType: "application/json",
        dataType: 'jsonp',
        success: function(json)
        // more stuff

    });
});

ajax呼び出し内でグローバル変数を割り当てる方法、または.jsファイル全体でグローバル変数を使用する方法を示す多くの回答を読みましたが、両方を組み合わせて行う方法を示すものはありません。

グローバル変数を単純に使用した場合、元の値に対しては機能しますが、ajax 呼び出し内で変更された値は表示されません。値を割り当ててから別の .js ファイルで使用する方法はありますか?

4

3 に答える 3

1

グローバル変数を使用する代わりに、必要な変数を ajax 呼び出しの invokedata を使用して渡してみませんか?

成功の呼び出しで使用します。

http://weboutofthebox.com/en-GB/28/Article/Ajaxinvokedataparameter

于 2013-01-28T15:58:35.767 に答える
0

AJAX 呼び出しの実行時に Javascript が「保持」されず、非同期であり、2 番目の ajax 呼び出しの場合、変数はまだ設定されていません。だから...これを試してください:

citations.js:

$(document).ready(function($) {
var url = some url;
$.ajax({
    type: 'GET',
    url: url,
    jsonpCallback: 'getSBJSON',
    contentType: "application/json",
    dataType: 'jsonp',
    success: function(json) {
                  //Does some stuff

                   urlId = product of some stuff;

        $.ajax({
            type: 'GET',
            url: url + urlId,
            jsonpCallback: 'getSBJSON',
            contentType: "application/json",
            dataType: 'jsonp',
            success: function(json) {

                if (json.length > 0) {
                    readyToGo(citId);
                    window.open('Citations.html', '_self');
                } else {
                var page = linkBase + urlId;
                window.open(page);
                }  
            },
            error: function(e) {
                console.log(e.message);
            }   
         });  

    });   
    },
    error: function(e) {
        console.log(e.message);
    }
});
});

main.js:

var readyToGo = function() {

    var itemLnkId = arguments[0];
    $.ajax({
        type: 'GET',
        url: url + citId,
        jsonpCallback: 'getSBJSON',
        contentType: "application/json",
        dataType: 'jsonp',
        success: function(json)
        // more stuff

    });
}

このようなことができます:)

于 2013-01-27T09:52:05.863 に答える