Javascript jqueryajax获取定制

Javascript jqueryajax获取定制,javascript,jquery,ajax,Javascript,Jquery,Ajax,使用在(或其他任何地方)定义的众多选项之一,我可以将传入数据映射到特定的数据类型,而不是通常返回的默认通用对象吗 我通常的方法是通过获取每个属性并将其放入我真正想要使用的新对象的构造函数来“转换”生成的对象。然后,我就忘了那个老东西。我认为有一种更有效的方法来做到这一点 我提出了一些想法,比如简单地向每个返回的对象添加方法。它工作得很好,但我只需要知道是否有一种更有效的方法。所以你说你有如下代码: function Pirate(name, hasParrot) { this.name =

使用在(或其他任何地方)定义的众多选项之一,我可以将传入数据映射到特定的数据类型,而不是通常返回的默认通用对象吗

我通常的方法是通过获取每个属性并将其放入我真正想要使用的新对象的构造函数来“转换”生成的对象。然后,我就忘了那个老东西。我认为有一种更有效的方法来做到这一点


我提出了一些想法,比如简单地向每个返回的对象添加方法。它工作得很好,但我只需要知道是否有一种更有效的方法。

所以你说你有如下代码:

function Pirate(name, hasParrot)
{
  this.name = name;
  this.hasParrot = hasParrot;
}
服务器正在发送此JSON数据:

{
  name: "Blackbeard",
  hasParrot: true
}
哪个jQuery正在转换为普通对象,对吗? 如果是这种情况,您可以使用将服务器的数据直接解析为盗版对象,如下所示:

// 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海盗”
替换为
“文本海盗”
,并为ajax调用返回的原始文本编写您自己的解析器。

您能提供一个您想要的示例吗?您是否尝试设置
数据类型
选项?“你也可以试试。”西姆肖恩,我想Na7coldwater解释得很好。看看下面他回答的第一部分。哈哈,我喜欢这个例子,但我认为这和我通常做的浏览器/设备的工作量差不多。它看起来仍然将json字符串解析为通用对象,并将存储在该对象中的值传递到另一个对象类型的新实例中。我试图找出是否有办法让ajax将json字符串直接解析到海盗对象中。不过,你似乎明白我的问题。考虑到我在工作了一天之后就把它打印出来了,我很惊讶有人收到了它。@BDawg我编辑了我的答案,包括了直接从原始文本转换的说明。哈!美丽的!先生,你赢了。非常感谢你!