私はこれをコードの下に持っています..
function getGrades(grading_company) {
if (grading_company == 'Not Specified') {
// Remove grades box & show condition box
showConditionBox();
} else {
// Set file to get results from..
var loadUrl = "ajax_files/get_grades.php";
// Set data string
var dataString = 'gc_id=' + grading_company;
// Set the callback function to run on success
var callback = showGradesBox;
// Run the AJAX request
runAjax(loadUrl, dataString, callback);
}
}
function runAjax(loadUrl, dataString, callback) {
jQuery.ajax({
type: 'GET',
url: loadUrl,
data: dataString,
dataType: 'html',
error: ajaxError,
success: function(response) {
callback(response);
}
});
}
編集:コールバック関数として呼び出される関数は次のとおりです。
function showGradesBox(response) {
// Load data into grade field
jQuery('#grade').html(response);
// Hide condition fields
jQuery('#condition').hide();
jQuery('#condition_text').hide();
// Show grade fields
jQuery('#grade_wrapper').show();
jQuery('#grade_text_wrapper').show();
}
grading_company
変数をパラメーターとしてコールバック関数に渡したい場合、それをrunAjax
呼び出しで別のパラメーターとして追加することなく行う方法はありますか? runAjax
関数を他の使用法に対して開いたままにしようとしているので、追加のパラメーターを渡したくありません。しかし、どうにかしてコールバック内に含めることができれば、素晴らしいことです。
コールバックを匿名関数に変更します。
// Set the callback function to run on success
var callback = function () {
showGradesBox(grading_company);
};
これにより、パラメーターを内部関数に渡すことができます。
編集:ajax応答を許可するには:
// Set the callback function to run on success
var callback = function (response) {
showGradesBox(grading_company, response);
};
別の可能性は、dataString
do dataObject
を実行する代わりに、そのオブジェクトをコールバックに渡すことです。そのようです:
_function getGrades(grading_company) {
if (grading_company == 'Not Specified') {
// Remove grades box & show condition box
showConditionBox();
} else {
// Set file to get results from..
var loadUrl = "ajax_files/get_grades.php";
// Set data object
var dataObject = {
'gc_id' : grading_company
/*to do multiples..
'item1' : value1,
'item2' : value2,
'etc' : etc */
}
// Set the callback function to run on success
var callback = showGradesBox;
// Run the AJAX request
runAjax(loadUrl, dataObject, callback);
}
}
function runAjax(loadUrl, dataObject, callback) {
jQuery.ajax({
type: 'GET',
url: loadUrl,
data: $.param(dataObject),
dataType: 'html',
error: ajaxError,
success: function(response) {
callback(response, dataObject);
}
});
}
_
$.param()
が追加されていることに注意してください。
次に、コールバック関数で、どのデータを取得するかを知る必要があります。 function setGrades(resp, data) { ... }
がコールバックの場合、setGrades
の値にアクセスできます
_function setGrades(resp, data) {
alert( data.gc_id);
}
_
[〜#〜] edit [〜#〜]
テスト後、$(dataObject).serialize()
は機能しないことがわかりました。そこで、$.param()
を使用するように更新しました。詳しくは this SO post をご覧ください。