jQuery Ajaxオブジェクトで必要とされるいくつかのプロパティをオブジェクトパラメータとして渡して、汎用Ajax関数を構築しようとしています。私はパズルの一片にこだわっています、それは "done"内でコールバック関数を渡す適切な方法です。アイデアは私の.jsファイル内の約10個のajax関数をただ1つのajax関数で置き換えることです。ジェネリックjquery ajaxコールでメソッドまたは関数を構築して呼び出す方法
は、ここに私のコードです:
// The generic ajax function, which will be called by various functions
// and passing variable parameters, different controller urls, different
// GET or POST types, different POST data sets, and finally, different
// callback functions.
function generalAjax(params){
$.ajax({
url: params.url,
type: params.type,
data : params.formData,
dataType : 'json'
}).done(function(data) {
params.callback; // <-- Trying to get this line to work.
}).fail(function(jqXHR, textStatus){
var string = "Ajax request failed : " + textStatus + " - " + jqXHR.responseText;
$("#diag").html(string);
});
}
// Create the prototype
function ajaxParams(url, type, data, callback) {
this.url = url;
this.type = type;
this.formData = data;
this.callback = callback;
}
// A button in my php file will call this function.
function nameSearch(){
var url = "/ajax/name_search/";
var type = "POST";
var formData = { 'q' : document.getElementsByName("searchname")[0].value };
var callback = nameSearchCallback; // Specific method for this event
var params = new ajaxParams(url, type, formData, callback);
generalAjax(params);
}
// One specific callback function for one specific event trigger.
function nameSearchCallback(e){
var string = "";
$.each(e,function(k,v){
string += k + " = " + v + "\n";
if(v instanceof Object == true){
string += "<ul>\n";
$.each(v,function(kk,vv){
string += "<li>" + kk + " = " + vv + "</li>\n";
});
string += "</ul>\n";
}
});
$("#form-panel").html(string);
}
15行下、あなたは私が特定の機能にハードコーディングされたスクリプトまたは直接呼び出しのためparameters.callbackを置換してきた場所を確認することができます。私が望むのは、genericAjax関数を呼び出すインスタンス化されたオブジェクトのニーズに応じて、その行がさまざまな関数やメソッドを呼び出すことです。
私はparams.callback
またはparams.callback()
を試みるかどうかに応じて、最高の状態で、何も最悪の起こらない、または、ページが更新され、私のJavaScriptコンソールに私はjqueryのライブラリファイルにTypeError : a is undefined
を取得します。
は、私も私もnameSearchCallback()関数への参照をスキップし、ちょうど
params.callback = function(){
var string = "";
$.each(e,function(k,v){
string += k + " = " + v + "\n";
if(v instanceof Object == true){
string += "<ul>\n";
$.each(v,function(kk,vv){
string += "<li>" + kk + " = " + vv + "</li>\n";
});
string += "</ul>\n";
}
});
$("#diag").html(string);
}
を行って '関数の後に' '.bind(のparams)を追加してみてください(){} 'イベントです。 –
@SuperCoolHandsomeGelBoyどのように見えるのか、バインドをどこで行うのか正確にはわからないのですか? jQueryドキュメントを読むときは、bind:ex: '$("#someElement ")を使用するときに要素をターゲットにします。バインド(params) '混乱している。 – TARKUS