Вопрос

Пользуюсь рекомендациями, изложенными здесь (http://www.odetocode.com/articles/473.aspx), чтобы написать систему веб-чата на JavaScript AJAX с использованием моделируемого Пространство имен и прототипирование.

В одном из моих методов-прототипов я вызываю метод $.ajax метод в jQuery.Затем я хочу передать возвращенные данные JSON в метод внутри моего пространства имен веб-чата JavaScript.

Кажется, проблема в том, что я создал экземпляр своего веб-чата JavaScript и не могу напрямую вызвать метод внутри него, потому что мне нужно обращаться к нему через экземпляр.

Ключевой частью приведенного ниже кода является

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

Я думаю, поскольку мы находимся внутри метода $.ajax(), это этот больше не относится к нашему объекту WebchatV3.

Полный код JavaScript показан ниже:

/// <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);
    }
Это было полезно?

Решение

Самый простой способ исправить это — создать переменную, которая ссылается на this в необходимом объеме. this и область действия в javascript работают иначе, чем в большинстве языков, в данном случае речь идет об объекте, передаваемом в функцию.

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

Другие советы

Пытаться

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

это может сработать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top