Вопросительный знак существует, потому что вы указали функцию обратного вызова JSONP?в строке запроса (т. е. &jsonp=?
).Из соображений безопасности (в частности, политика одного и того же происхождения ) вы не можете сделать запрос AJAX для сайта за пределами того же домена, что и страница, на которой вы находитесь.Чтобы обойти это, JSONP работает путем создания тега сценария, в котором для SRC задан URL-адрес сценария на другом сайте.Это загрузит внешний файл JavaScript и запустит любой код.Теперь, чтобы связать этот внешний код с вашим JavaScript, внешний API получает имя вызываемой функции (&jsonp=functionnametocall
).Возвращенный JavaScript вызывает эту функцию и передает данные, которые он пытается вернуть как объект JSON, в качестве первого аргумента.
Итак, причина, по которой вы видите знак вопроса, когда вы идете туда, заключается в том, что вы передаетевопросительный знак для параметра строки запроса jsonp.jQuery автоматически преобразует вопросительный знак в URL, например http://www.test.com/api/apikey=292929&callback=?
, в функцию с уникальным именем.Это обрабатывается в фоновом режиме с помощью jQuery, так что вам не нужно об этом думать.
Теперь, несмотря на это, я не знаю, определяет ли jQuery, является ли имя параметра обратного вызова чем-то отличным отcallback=?
.$.getJSON()
однако является краткой формой для более длинных:
$.ajax({
url: url,
dataType: 'json',
data: data,
success: callback
});
Я предлагаю вам попробовать использовать $.ajax()
напрямую и установить значение jsonp
равным "jsonp"
.Это говорит методу $.ajax()
, что параметр строки запроса называется jsonp
, а не callback
.Итак, вот так:
$.ajax({
url: url,
dataType: 'json',
data: data,
success: callback,
jsonp:"jsonp"
});
Дополнительная информация: $. GetJSON | $. Ajax ()