JQuery AJAX: передать область, чтобы установить его - PullRequest
3 голосов
/ 03 июля 2011

У меня есть этот класс с этим вызовом ajax:

Персона = функция () {

    this.__type = "PersonDto:#Empower.Service.Common.Dto";
    this.Name = undefined;
    this.Surname = undefined;

    this.GetById = function (id) {
        return $.ajax({
            type: "POST",
            url: "/Services/PersonService.svc/GetPersonById",
            data: JSON.stringify(id),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {
                ...
                this = data;
                ...
            }
        });
    }
};

При успешном вызове ajax я хочу установить текущий экземпляр person, но «this» не является правильным для настройки. Есть более элегантный способ, чем использование глобальной переменной?

Заранее благодарю за помощь, и я прошу прощения за мой плохой английский

Ответы [ 3 ]

5 голосов
/ 03 июля 2011

Метод jQuery.ajax() [документы] дает вам свойство context, где вы можете установить значение this в обратных вызовах.

Просто сделай:

context: this,

... в вашем вызове, как в:

this.GetById = function (id) {
    return $.ajax({
        type: "POST",
        context: this,  // <---- context property to set "this" in the callbacks
        url: "/Services/PersonService.svc/GetPersonById",
        data: JSON.stringify(id),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {

             // in here, "this" will be the same as in your "getById" method

        }
    });
}
1 голос
/ 03 июля 2011

Вам не нужен глобальный.

Просто положите:

 var self = this;

непосредственно перед строкой return $.ajax(...), а затем используйте self для ссылки на текущий экземпляр внутри функции обратного вызова AJAX.

Эта переменная будет находиться только в области действия GetById().

0 голосов
/ 03 июля 2011

Конечно, вы можете поместить this в переменную и затем использовать эту переменную в вашем обратном вызове

var self = this;

this.GetById = function (id) {
    return $.ajax({
        type: "POST",
        url: "/Services/PersonService.svc/GetPersonById",
        data: JSON.stringify(id),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
            ...
            self = data;
            ...
        }
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...