Ich versuche, eine generische Ajax-Funktion zu konstruieren, indem Sie die wenigen Eigenschaften von einem jQuery Ajax-Objekt als Objekt Parameter übergeben. Ich stecke an einem Stück des Puzzles fest, das ist der richtige Weg, um die Callback-Funktion in "fertig" zu übergeben. Die Idee ist, etwa 10 Ajax-Funktionen in meiner .js-Datei durch nur eine Ajax-Funktion zu ersetzen.Wie zu konstruieren und aufzurufen Methode oder Funktion in generischen Jquery Ajax Call
Hier ist mein Code:
// 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 Zeilen nach unten, können Sie sehen, wo ich parameters.callback für eine hart codierte Skript oder direkter Aufruf einer bestimmten Funktion ersetzt haben. Ich möchte, dass diese Zeile je nach den Anforderungen des instanziierten Objekts, das die genericAjax-Funktion aufruft, verschiedene Funktionen oder Methoden aufruft.
Je nachdem, ob ich versuchte params.callback
oder params.callback()
, bestenfalls, nichts passiert, oder im schlimmsten Fall, erhalte die Seite aktualisiert und in meiner Javascript-Konsole ich ein TypeError : a is undefined
in der jQuery-Bibliothek-Datei.
Ich habe auch var callback = nameSearchCallback;
und var callback = nameSearchCallback();
habe ich versucht, auch habe den Verweis auf die nameSearchCallback Überspringen() Funktion, und das Schreiben nur die Funktion in params.callback als
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);
}
Versuchen zu hinzufügen '.bind (params)' nach der getan 'Funktion() {} 'Ereignis. –
@SuperCoolHandsomeGelBoy Nicht genau sicher, wie das aussehen soll oder wo die Bindung zu machen? Wenn Sie die jQuery-Dokumente lesen, greifen Sie auf ein Element zu, wenn Sie bind verwenden, zB: '$ (" # someElement ").bind (params) '. Verwirrt. – TARKUS