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つ以上のパラメーターを渡すにはどうすればよいですか?
渡す必要はなく、次のように、既に持っている変数を参照するだけです。
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)
});
関数のゆがみ、例えば.
function getResults(locationType) {
$.getJSON(url, null, function(results) {
searchResults(results, locationType)
});
}
ただし、特定の状況では、渡す必要さえありません。コールバックで値に直接アクセスできます。
。ajax メソッドを使用できます。
var locationType = 3;
var url = 'blah blah blah' + '&locationType=' + locationType;
$.ajax({
url: url,
context: { lt: locationType },
success: function(results) {
searchResults(results, this.lt);
}
});
locationType
(値は3
)コールバックで、単に使用する
function(results) { .....
closures のおかげで、locationType
はコールバックで自動的に利用可能になります。
試すことができます:
function getResults(locationType) {
$.getJSON(url, {p1:'xxx', p2: 'yyy'}, function(results) {
searchResults(results, locationType)
});
}