JQuery Ajax Получить настройки - PullRequest
1 голос
/ 14 июня 2011

Используя одну из многих опций, определенных в http://api.jquery.com/jQuery.ajax/ (или где-либо еще), я могу сопоставить входящие данные с определенным типом данных, а не с универсальным объектом по умолчанию, который обычно возвращается?

Мой обычный метод - «преобразовать» сгенерированный объект, захватывая каждое свойство и помещая его в конструктор для нового объекта, который я действительно хочу использовать.Тогда я просто забываю о старом объекте.Я полагаю, что есть гораздо более эффективный способ сделать это.

Я предложил / нашел несколько идей, таких как простое добавление методов к каждому из возвращаемых объектов.Это хорошо работает, но я просто должен знать, есть ли еще более эффективный метод.

1 Ответ

3 голосов
/ 14 июня 2011

Итак, вы говорите, что у вас есть код, подобный следующему:

function Pirate(name, hasParrot)
{
  this.name = name;
  this.hasParrot = hasParrot;
}

, и сервер отправляет эти данные JSON:

{
  name: "Blackbeard",
  hasParrot: true
}

, который jQuery преобразует в простойобъект, верно?Если это так, вы можете использовать пользовательский тип данных для синтаксического анализа данных сервера непосредственно в объект Pirate, например:

// First define the converter:
jQuery.ajaxSetup({
  converters: {
    "json pirate": function(obj) {
      if(!obj.name || typeof obj.hasParrot === "undefined")
      {
        throw "Not a valid Pirate object!";
      }
      else
      {
        return new Pirate(obj.name, obj.hasParrot);
      }
    }
  }
}
// Then use it!
$.ajax("http://example.com/getPirate", {
  data: {id: 20},
  dataType: "pirate",
  success: function(pirate){
    console.log(pirate instanceof Pirate); // Should be true
  }
});

Редактировать: если вы действительно хотите пропустить шагчтобы преобразовать в JSON, вы могли бы заменить "json pirate" выше на "text pirate" и написать собственный синтаксический анализатор для необработанного текста, возвращаемого вызовом ajax.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...