web-dev-qa-db-ja.com

jQuery $ .getJSONコールバックメソッドにパラメーターを渡すにはどうすればよいですか?

JQueryを使用して、Ajax/$.getJSON経由でカスタムAPIを呼び出そうとしています。

Ajaxコールバックメソッドにカスタム値を渡そうとしていますが、その値はパススルーされず、実際に上書きされています。これは私のコードです:

var locationType = 3;
var url = 'blah blah blah' + '&locationType=' + locationType;

$("#loading_status").show();

$.getJSON(url, null, function(results, locationType) {
    searchResults(results, locationType)
});

AJAX=を使用してURLを呼び出す前のlocationTypeの値は3です。しかし、呼び出しがデータを正常に返した後、locationTypeの値これはsuccessです。これは、 コールバックのメソッドシグネチャ が次のとおりであるためです。

callback(data、textStatus)リクエストが成功した場合に実行されるコールバック関数。

コールバックメソッドに1つ以上のパラメーターを渡すにはどうすればよいですか?

25
Pure.Krome

渡す必要はなく、次のように、既に持っている変数を参照するだけです。

var locationType = 3;
var url = 'blah blah blah' + '&locationType=' + locationType;
$("#loading_status").show();
$.getJSON(url, null, function(results) {
    searchResults(results, locationType)
});

また、データオブジェクトがない場合はnullを渡す必要はありません。これはオプションのパラメーターであり、jQueryは2番目のパラメーターが関数であるかどうかを確認するため、これを行うことができます。

$.getJSON(url, function(results) {
    searchResults(results, locationType)
});
19
Nick Craver

関数のゆがみ、例えば.

function getResults(locationType) {
    $.getJSON(url, null, function(results) {
        searchResults(results, locationType)
    });
}

ただし、特定の状況では、渡す必要さえありません。コールバックで値に直接アクセスできます。

18
Felix Kling

。ajax メソッドを使用できます。

var locationType = 3;
var url = 'blah blah blah' + '&locationType=' + locationType;
$.ajax({
    url: url,
    context: { lt: locationType },
    success: function(results) {
        searchResults(results, this.lt);    
    }
});
4
Darin Dimitrov

locationType(値は3)コールバックで、単に使用する

function(results) { .....

closures のおかげで、locationTypeはコールバックで自動的に利用可能になります。

2
Pekka 웃

試すことができます:

function getResults(locationType) {
    $.getJSON(url, {p1:'xxx', p2: 'yyy'}, function(results) {
        searchResults(results, locationType)
    });
}
0
user6450793