Чтобы другие могли отправлять запросы jsonp, вам нужно проверить сервер, если в URL-адресе запроса есть параметр callback
.
например.
/shared/cfm/json.cfm?callback=foo&c=27321
(обратите внимание, что foo - это просто пример, это может быть строка любого типа, например, jQuery использует что-то вроде callback=jsonp1231313123
)
Если да, то вместо этого
( {"COLUMNS": ...... } )
тогда вам нужно это вернуть (значение параметра обратного вызова должно быть добавлено перед ответами)
foo( {"COLUMNS": ...... } )
Теперь вы сможете получить ответ либо, используя
$.ajax
и datatype: 'jsonp'
или
$.getJson("http://www.port.../json.cfm?callback=?", {c:'27321'}, somefn)
Как я могу сказать это ... Ну, проблемы, которые вы пришли из-за того, что вы не внимательно прочитали то, что я написал. И (может быть?) Не удосужился прочитать отрывки из документации jQuery API для $.ajax
и $.getJSON
, где написано что-то о jsonp.
- Данные http://www.portlandonline.com/shared/cfm/json.cfm?c=27321&callback=test по-прежнему неверны (
function
и return
ключевое слово по-прежнему присутствует)
Данные, которые возвращает ваш URL http://kneedeepincode.com/api/test/, в порядке. По крайней мере, в некотором смысле (вы не уважаете параметр обратного вызова и всегда возвращаете, как если бы был установлен callback=test
. Но это нормально для тестирования. Но вносит небольшую ошибку, которая заставляет вас думать, что он не работает.
- Причина, по которой вы думаете, что даже ваш тестовый сайт не работает, заключается в том, что вы неправильно его называете. (Перейдите к концу ответа, чтобы увидеть фрагмент кода, который прекрасно загружает ваш код.
Посмотрим, что я написал выше:
Либо использовать:
$.ajax
и datatype: 'jsonp'
или используйте
$.getJson
и добавьте callback=?
к URL (! НЕ callback=test
).
Но на вашем тестовом сайте вы добавляете callback=test
вместо callback=?
к URL и используете $.getJSON
. Это не сработает, так как в документации очень четко указано, что вы должны делать, когда вы используете $.getJSON
и хотите действительно сделать запрос jsonp.
Если URL содержит строку
"callback=?"
в URL, запрос
вместо этого обрабатывается как JSONP. Увидеть
обсуждение типа данных jsonp
в
$. Ajax () для более подробной информации.
Когда вы установите callback=test
, jQuery не распознает, что вы не хотите jsonp-запрос вместо json-запроса, и, таким образом, не может выполнить то, что ожидал, что он сделает. И просто обрабатывает отправляет callback = test, как если бы это был обычный параметр запроса get, а не обратный вызов jsonp.
Если вы используете $.ajax
и datatype: 'jsonp'
, jQuery автоматически добавит callback=jsonp[somenumberhere]
к URL.
Если вы хотите использовать $.getJson
, вам нужно добавить callback=?
к URL (но я повторяю ! НЕ callback=test
. JQuery снова обработает замену ?
на значение в виде jsonp[somenumberhere]
).
Фрагмент рабочего кода для вашего тестового сайта:
$(document).ready(function() {
$.ajax({
url : "http://kneedeepincode.com/api/test/",
dataType : 'jsonp',
//normally you wouldn't set the jsonpCallback parameter
//here I need to do this because your test site acts as if callback=test was set
jsonpCallback: 'test',
success : function(data) {
$("body").empty();
for(var i = 0; i < data.COLUMNS.length; i++) {
$("body").append("<p>"+data.COLUMNS[i]+"</p>");
}
}
});
});