Я изначально ответил на этот вопрос, полагая, что URL был недействительным из-за второго '?'персонаж.С момента привлечения отрицательного голоса я осознаю свою ошибку и то, что это стандартный синтаксис JSONP для использования случайно сгенерированного имени функции обратного вызова от JQuery.
Поэтому я провел небольшое исследование, чтобы наверстать упущенное в моем первоначальном посте, и у меня есть некоторые идеи.для вас.
Данные ответа, которые вы упомянули [{"First":"John","FirstLength":[4],"Last":"Doe","LastLength":[3]}]
, являются действительными JSON из того, что я вижу.Однако согласно этому сообщению о Ошибка с json4j похоже, что некоторые библиотеки могут неправильно обрабатывать ваш ответ, начиная с квадратной скобки.Ваша проблема исчезнет, если вы уберете начальные и конечные квадратные скобки, чтобы вы возвращали один объект javascript в функцию обратного вызова, а не массив?
Из прочтения следующих двух превосходных постов похоже, что вы неполучить стандартную обработку ошибок JQuery, которую вы обычно получаете (как вы описали)
http://www.fbloggs.com/2010/07/09/how-to-access-cross-domain-data-with-ajax-using-jsonp-jquery-and-php/
Поскольку JSONP опирается на тег script, он не использует функции обратного вызова избазовый объект HTTPRequest.Это означает, что при использовании JSONP успех, неудача, полные функции обратного вызова в методе $ .ajax () не имеют значения и не работают.
http://www.ibm.com/developerworks/library/wa-aj-jsonp1/
Во-первых, обработка вызовов JSONP не связана с ошибками.Если динамическая вставка скрипта работает, вас вызывают;если нет, ничего не происходит.Он просто молча терпит неудачу.
Из этих постов я предлагаю еще одно предложение - явно указать, что dataType возвращается как JSONP.$.ajax
в JQuery может вести себя иначе, чем $.json
.Поэтому попробуйте использовать явную функцию обратного вызова, как это ...
$.ajax({
url: surl,
data: {id: id},
dataType: "jsonp",
jsonp : "callback",
jsonpCallback: "jsonpcallback"
});
Это последнее предложение требует JQuery 1.4 +