Это потому, что вы говорите jQuery, что ожидаете JSON-P , а не JSON , назад.Но возвращение JSON.JSON-P ужасно неправильно назван, назван так, чтобы не было путаницы.Это соглашение для передачи данных в функцию через тег script
.Напротив, JSON - это формат данных.
Пример JSON:
{"foo": "bar"}
Пример JSON-P:
yourCallback({"foo": "bar"});
JSON-P работает, потому что JSONподмножество буквенной нотации JavaScript.JSON-P - это не что иное, как обещание, что если вы сообщите службе, которую вы вызываете, какое имя функции нужно отозвать (обычно путем добавления в запрос параметра callback
), ответ будет в форме functionname(data)
где data
будет "JSON" (или, более обычно, литералом JavaScript, что может не совпадать с * ).Вы должны использовать URL-адрес JSON-P в теге script
src
(что делает для вас jQuery), чтобы обойти Политика одинакового происхождения , которая запрещает запросам ajax запрашивать данные у источникакроме документа, из которого они исходят (если сервер не поддерживает CORS , а ваш браузер поддерживает).