Как получить jQuery для получения плохо сформированного JSON через междоменный запрос? - PullRequest
1 голос
/ 24 января 2012

Я делаю запрос к старому серверу, который обслуживает неправильно сформированный JSON.Это не мое, поэтому я не могу изменить сервер.Это междоменный.Вот мой код:

$.ajax({
    url: 'http://someDomain.com/getData.htm',
    dataType: 'jsonp',
    error: function(jqXHR, textStatus, errorThrown) {
        alert("Got an error: " + textStatus + " " + errorThrown);
    },
    success: function(data) {
        alert("Got it: " + data);
    }
});

В таком виде, конечно, я получаю:

Got an error: parseerror Jquery12379789584794587_2893798579279874978 was not called.

Так что он задыхается, потому что ответ JSON-esque выглядит следующим образом:

{name:"RMA-83186",date:"01/24/12 13:30:45"}

... и jQuery по праву требует, чтобы он был правильно сформированным JSON.(Это не потому, что свойства должны быть заключены в двойные кавычки. См. «Важное» примечание здесь .)

Итак, я подумал, что я привнесу ответ как dataType: 'text', cleanи пусть jQuery анализирует его как JSON.Однако, когда я изменяю его на dataType: 'text', я получаю:

Got an error: error No transport

... это то, что вы получаете из междоменного запроса.Я попытался добавить crossDomain: true к запросу и использовать его с text dataType, но получил ту же ошибку.

Кто-нибудь знает, как я могу получить эти плохо сформированные данные из междоменного запроса, такЯ могу почистить и разобрать его?

Спасибо!

РЕДАКТИРОВАТЬ: dataFilter parm не помогает, потому что проблема с корнем (при использовании dataType:'jsonp') даже не плохо сформированаСтрока JSON, а скорее, что ответ не является истинным ответом JSONp, т. Е. Это не вызов функции.

1 Ответ

1 голос
/ 25 января 2012

Единственное предложение, которое, я думаю, будет работать, - это использование посредника на стороне сервера, которым вы управляете.Таким образом, вы можете правильно отформатировать данные и передать их обратно в JavaScript.Вы также можете использовать Yahoo!Труба .

Проблема в том, что вызов JSONP - это просто новый элемент сценария, добавленный в DOM.И вы не можете запросить простой текст из-за той же политики происхождения.Кроме того, поскольку сервер не возвращает правильный JSON, я уверен, что он не будет работать с запросом CORS .Поэтому вам придется использовать прокси.

...