Строка возврата из междоменного запроса AJAX - PullRequest
2 голосов
/ 16 июня 2011

Я ищу способ вернуть одну строку JSON / JSONP из междоменного запроса «AJAX».Вместо того, чтобы запросить строку и заставить JQuery автоматически возвращать ее как универсальный объект, я хочу получить строку до того, как произойдет преобразование.Здесь цель состоит в том, чтобы разобрать его сам, чтобы я мог превратить его прямо в новые объекты определенного типа (например, объект 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
}

IЯ очень рад, если JQuery не участвует в решении, пока оно работает.Я предпочел бы использовать JQuery, хотя.Из того, что я прочитал, методы javascript, используемые для получения данных JSONP (динамическое создание элемента сценария), вероятно, будут работать, но я не могу заставить это работать для меня.Я контролирую домен, из которого запрашиваю данные, и могу получить данные, если поменяю dataType в вызове AJAX на «JSONP», поэтому я знаю, что это работает.

Ответы [ 2 ]

1 голос
/ 16 июня 2011

Если ваши данные извлекаются из другого домена, вам нужно будет использовать 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, который легко использовать для инициализации вашего объекта.

0 голосов
/ 16 июня 2011

Не уверен, как это будет работать в сочетании с jsonp, но, возможно, конвертеры - это то, что вы ищете?

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