Javascript 'Espacios de nombres' y jQuery AJAX
-
22-08-2019 - |
Pregunta
Estoy usando las recomendaciones establecidas aquí ( http://www.odetocode.com /articles/473.aspx ) para escribir un sistema de charla electrónica JavaScript AJAX utilizando simulado los espacios de nombre y prototipos.
En una de mis métodos de prototipo Voy a llamar a la $. método Ajax en jQuery . Entonces, ¿qué quiero hacer es pasar los datos JSON devueltos en un método dentro de mi espacio de nombres charla electrónica JavaScript.
El problema parece ser debido a que he creado una instancia de mi charla electrónica JavaScript, no puedo llamar directamente a un método dentro de él, porque tengo que atender a través de la instancia.
La parte clave en el código de abajo es
success: function(data, textStatus) {
this.GetUpdate_Success(data)
},
Estoy pensando porque estamos dentro del método $ .ajax (), que este ya no se refiere a nuestro objeto WebchatV3.
El código JavaScript completo se muestra a continuación:
/// <reference path="/JavaScript/jquery-1.3.2-vsdoc2.js" />
// Simulated 'namespace'
var AvonAndSomerset = {}
// Chatroom run time data
AvonAndSomerset.WebchatV3 = function(memberId, passcode) {
this.Members = new Array(); // Members in the chatroom
this.Questions = new Array(); // The questions queue in the chatroom
// Details about the current user
this.currentMember = new AvonAndSomerset.WebchatV3.Member(memberId, passcode, null, null, null, null, null);
// Set-up AJAX defaults
$.ajaxSetup({ type: "POST", contentType: "application/json; charset=utf-8", dataType: "json" });
}
AvonAndSomerset.WebchatV3.prototype =
{
// Get latest Member,Quetsion,Transcript and Room data from server
GetUpdate: function(StartUp) {
$.ajax({ url: "JSON.aspx/Members_GetChanges",
data: "{ MemberID: " + this.currentMember.memberId + ", Passcode: \"" + this.currentMember.passcode + "\", ReturnAll: " + StartUp + " }",
success: function(data, textStatus) {
this.GetUpdate_Success(data)
},
error: function(result) {
alert('Members_GetChanges() failed: ' + result.responseText);
}
});
},
// Callback - on success of GetUpdate()
GetUpdate_Success: function(data) {
alert('The AJAX call was successful!');
},
// Does the MemberID exist in the local array?
Members_DoesExist: function(MemberID) {
alert('Searching for ' + MemberID);
alert(this.Members.length);
}
Solución
La forma más fácil de solucionar este problema es crear una variable que hace referencia a this
en el ámbito adecuado requerido. this
y el trabajo alcance diferente en la mayoría de lenguajes Javascript a continuación, en este caso se refiere al objeto que está siendo introducida en la función.
// Get latest Member,Quetsion,Transcript and Room data from server
GetUpdate: function(StartUp) {
//here
var self = this;
$.ajax({ url: "JSON.aspx/Members_GetChanges",
data: "{ MemberID: " + this.currentMember.memberId + ", Passcode: \"" + this.currentMember.passcode + "\", ReturnAll: " + StartUp + " }",
success: function(data, textStatus) {
self.GetUpdate_Success(data)
},
error: function(result) {
alert('Members_GetChanges() failed: ' + result.responseText);
}
});
},
Otros consejos
Trate
success: function(data, textStatus) {
AvonAndSomerset.WebchatV3.GetUpdate_Success(data)
},
que pueden trabajar.