从跨域AJAX请求返回字符串

时间:2011-06-16 18:16:13

标签: javascript jquery ajax jsonp

我正在寻找一种从跨域“AJAX”请求中返回单个JSON / JSONP字符串的方法。而不是请求字符串并让JQuery自动将其作为通用对象返回,我希望在转换发生之前获取字符串BEFORE。这里的目标是自己解析它,以便我可以直接将其转换为某种类型的新对象(例如Person对象)。

所以,为了明确这一点,我不希望在幕后进行任何字符串到通用对象的转换,这必须使用不同的域。

这是我想要做的非工作示例:

$.ajax({
    type: 'GET',
    url: 'http://www.someOtherDomain.com/GetPerson',
    dataType: 'text',
    success: parseToPerson
});

function parseToPerson( textToParse ) {
    // I think I can do this part, I just want to get it working up to this point
}

如果JQuery没有参与解决方案,我会非常高兴,只要它有效。不过我更喜欢使用JQuery。从我所读到的,用于获取JSONP数据(动态创建脚本元素)的javascript技术可能会起作用,但我似乎无法让它为我工作。我控制从我请求数据的域,如果我将AJAX调用中的dataType更改为'JSONP',我可以获取数据,所以我知道这是有效的。

2 个答案:

答案 0 :(得分:1)

如果从其他域检索数据,则需要使用JSONP(还有其他选项,但如果您控制服务,JSONP是最简单的)。 jQuery调用将如下所示:

$.ajax({
    // type: 'GET', --> this is the default, you don't need this line
    url: 'http://www.someOtherDomain.com/GetPerson',
    dataType: 'jsonp',
    success: parseToPerson
});

发送给您服务的实际请求为http://www.someOtherDomain.com/GetPerson?callback=arbitrary_function_name。在服务方面,您需要返回如下数据:

arbitrary_function_name("the string (or JSON data) that I want to return");

因此,您需要检查查询字符串参数,获取callback参数的值,并将其回显,就好像您正在调用具有该名称的Javascript函数(您是),传入您希望通过服务提供的值。然后,您的success功能将使用您提供的服务提供的数据进行调用。

如果要将返回的数据反序列化为Javascript对象,那么返回JSON数据可能比使用字符串更好,因此服务返回的数据可能如下所示:

arbitrary_function_name({
    "name":"Bob Person", 
    "age":27, 
    "etc":"More data"
});

这样你就不必担心解析字符串了 - 它已经存在于一个易于用来初始化你的对象的Javascript对象中。

答案 1 :(得分:0)

不确定这将如何与jsonp一起使用,但也许converters正是您要找的?

$.ajax(url, {
  dataType: "person",
  converters: {
    "text person": function(textValue) {
      return parseToPerson(textValue);
    }
  }
});