#jquery #jsonp
#jquery #jsonp
Вопрос:
ОБНОВЛЕНИЕ 1:
Я только что обновился с jquery 1.4.4 до 1.6.1. Как это влияет на сценарий в исходном вопросе?
ОРИГИНАЛЬНЫЙ ВОПРОС:
Так же, как я тестировал, я сделал:
$(document).ready(function() {
get_jsonp_feed();
function get_jsonp_feed() {
$.ajax({
url: 'http://www.remote_host.co.uk/feed.php',
type: 'GET',
dataType: 'jsonp',
jsonp: 'callback',
jsonpCallback: 'jsonpCallback',
error: function(xhr, status, error) {
alert("error");
},
success: function(jsonp) {
alert("success");
}
});
}
function jsonpCallback(data){
alert("jsonpCallback");
}
});
Я ожидал получить 2 предупреждения, первое показывающее success
и второе показывающее jsonpCallback
. Но я получаю только первое предупреждение success
. Почему не отображается второе предупреждение?
Ответ №1:
Вам следует изменить:
jsonp: 'callback',
Для
jsonp: false
чтобы переопределить значение обратного вызова по умолчанию.
Смотрите: http://api.jquery.com/jQuery.ajax /
Комментарии:
1. Я все еще не получил второе предупреждение.
Ответ №2:
Джордж прав, установите для параметра jsonp значение false — начиная с jQuery 1.5 (итак, способ настройки зависит от версии jQuery). Я не верю, что указанное вами имя обратного вызова вызывается как функция (скорее, это имя, указанное в URL, представленном серверу). Если вы получаете успех, значит, вы получили данные. Любопытно: настроена ли у вас запись hosts для разработчиков, потому что я пытался провести некоторое тестирование, и http://www.remote_host.co.uk/feed.php не решает для меня.
Комментарии:
1. обратный вызов добавляется к URL автоматически afaik.
2. Пожалуйста, смотрите обновление 1. Кроме того, remote_host был сделан, чтобы скрыть название моего веб-сайта / компании.
3. Правильно, имя обратного вызова добавляется автоматически; установите для «jsonp:» значение false и установите «jsonpCallback:», как того требует хост-сервер. jQuery обрабатывает ответ. Указанное вами имя обратного вызова не вызывается как функция. Вы получаете данные JSON при «успешном» обратном вызове.
Ответ №3:
Я думаю, вам нужно изменить jsonpCallBack:'jsonpCallback'
бит на jsonpCallBack: function() { alert('boo'); }
Комментарии:
1. Начиная с версии jQuery 1.5, функция может быть предоставлена в качестве параметра обратного вызова jsonpCallback метода $.ajax. Эта функция вызывается не при получении ответа от запроса XHR, а до выполнения запроса и должна возвращать строку (которая будет использоваться для аргумента обратного вызова в URL).
Ответ №4:
Всем моим друзьям, у которых возникли проблемы с PHP jQuery JSONP
вот и все, я использую php 5.3 и Jquery 1.10
$('#button_submit2').click(function () {
prevent_caching = (new Date()).getTime();
$.ajax({
type: 'GET'
, url: "http://yoururl.com/webservice.php"
, dataType: 'jsonp' //Besides plain xml, the dataType can be html, json, jsonp, script, or text.
, jsonp: 'callback' //this will be added in the query as parameter
, jsonpCallback: 'jsonp_reply' //this is what ajax call is expecting json to be encapsulated ine i.e. json_reply(JSON_RESPONSE)
, data: {
uniq_val: prevent_caching
, method_name: "get_all_tasks"
, format: 'jsonp'
}
, cache: false
, async: false
})
.success(function (rsp) {
console.log('success' rsp);
})
.fail(function (xhr, error, thrownError) {
console.log('fail status:[' xhr.status '] error:[' thrownError ']');
})
.always(function () {
console.log('complete');
});
});
Комментарии:
1. Почему это было отклонено? Серьезно, SO должен предотвращать провалы голосования без объяснения причин!! Есть какая-нибудь помощь по этому поводу?