Enlace de funciones dinámicas de JavaScript/jQuery y ajax
Frecuentes
Visto 164 veces
0
I'm trying to build out a dynamic list of UI elements. I can hard code the UI list now, and everything works fine. I want this to be extensible however, so I'm trying to figure a way of passing id tags and corresponding functions to be called. Essentially, the callback function for my ajax call isn't being executed, though I am posting the correct data, and receiving the correct response. Here's the code:
myModule = function () {
var titleUI = Object.create(ChainUI());
var memcachedId = '<?php echo $memcachedId;?>';
return {
printChain: function(data) {
alert("printchain");
var territories = jQuery.parseJSON(data);
titleUI.makeChainTable();
territories.forEach(function(territory) {
titleUI.territoryDisplay(territory);
});
titleUI.tableDecorator($('#chainTable'));
},
loadChain: function() {
titleUI.destroyChainTable();
var url = 'traffichandler.php';
var instruction = {'instruction': 'titleChain', 'method': 'printChain', 'memcachedId': memcachedId.toString()};
$.post(url, instruction, this.printChain);
},
loadDefault: function() {
titleUI.loadUI(['Title Chain'], [this.loadChain]);
}
};
}();
The corresponding titleUI code follows:
var ChainUI = function() {
return {
loadUI: function(uiList, funcList) {
$('#uiFunctions').empty();
for(var i in uiList) {
var toDom = '<li id="'+uiList[i]+'">';
toDom += uiList[i];
toDom += '</li>';
$('#uiFunctions').html(toDom);
}
for(var i = 0; i < uiList.length; i++) {
var myFunc = funcList[i];
$('#uiFunctions').delegate($('#'+uiList[i]), "click",
function() {myFunc();}
);
}
},
}
In myModule.loadDefault, I can get this.loadChain to fire. I can't get this.printChain inside the $.post to work though. If remove all the dynamic stuff this.printChain works no problem. Don't get too hung up on the syntax, as is, the syntax is fine on my end. How can I get the ajax call back to work? Thanks!
0 Respuestas
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas javascript jquery ajax function or haz tu propia pregunta.
Hmm, what does not work with the
$.post
? Does the ajax post fire in firebug? - JohanYes, I am posting and receiving the correct data. this.printChain is not being called. I am not seeing the alert. Though the implementation of ChainUI.loadUI is not shown, I am able to pass uiList and funcList just fine. That seems to work, apparently I can't do multiple levels of function passing, I think. - Dale
Maybe a longshot, but have you tried something like
$.post(url, instruction, new myModule.printChain);
- JohanI wouldn't dare do that. myModule is a singleton, that would break the whole design pattern. - Dale
Que pasa si tu
console.log(this);
orconsole.log(typeof this.printChain)
inside loadChain? - Johan