Frage

Ich bin die Empfehlungen mit hier festgelegt ( http://www.odetocode.com /articles/473.aspx ) ein JavaScript-AJAX Webchat-System simuliert Namensräume und Prototyping zu schreiben.

In einem meiner Prototyp Methoden Ich rufe die $. Ajax Methode in jQuery . Was ich will, dann zu tun ist, um die zurückgegebenen JSON-Daten in eine Methode in meiner JavaScript Webchat Namespace übergeben.

Das Problem scheint zu sein, weil ich eine Instanz meiner JavaScript Webchat erstellt haben, kann ich nicht direkt ein Verfahren innerhalb nennen, weil ich es durch die Instanz ansprechen müssen.

Der wichtigste Teil in dem unten stehenden Code

            success: function(data, textStatus) {
                this.GetUpdate_Success(data)
            },

Ich denke ich, weil wir in der $ Schnipsel () Methode sind, dass dieses nicht mehr auf unsere WebchatV3 Objekt.

Der vollständige JavaScript-Code ist wie folgt:

/// <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);
    }
War es hilfreich?

Lösung

Der einfachste Weg, dies zu beheben, ist eine Variable zu erstellen, die erforderlich this im richtigen Umfang verweist. this und Umfang funktioniert anders in Javascript, dann die meist Sprachen, in diesem Fall ist es auf das Objekt verweist in die Funktion übergeben werden.

// 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);
        }
    });
},

Andere Tipps

Versuchen

        success: function(data, textStatus) {
            AvonAndSomerset.WebchatV3.GetUpdate_Success(data)
        },

, die funktionieren kann.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top