2015-05-04 3 views
2

Я пытаюсь сделать запрос JSONP на сервер. Это мой код:Как получить текст ответа из запроса AJAX с помощью jQuery

$.ajax({ 
    type: 'GET', 
    url: myURL, 
    async: false, 
    crossDomain: true, 
    dataType: 'jsonp', 
    jsonpCallback: 'jsonCallback', 
    headers: { 
    'Accept': 'application/json', //this is required by the server 
    'key': key 
    }, 
    success: function() { 
    alert('1'); 
    }, 
    error: function() { 
    alert('2'); 
    }, 
    complete: function(){ 
    alert('3'); 
    } 
});//code indentation 

Когда я запускаю код, он ошибается. Но если я открою инструменты для разработчиков в Chrome (ctrl + shift + I), я могу увидеть запрос в разделе «сеть». Нажатие на него показывает правильный ответ (и показывает, что запрос был принят).

Извинения есть действительно очевидное решение (я пробовал искать, но не повезло), но на данный момент я хорошо и действительно озадачен. Любая помощь могла бы быть полезна.

:: EDIT ::

изменения функции ошибки в:

error: function() { 
    console.log('error', arguments); 
}, 

возвращается сообщение "jsonCallback не был назван" Благодаря Aaron Digulla ниже.

Ответ от сервера в формате JSON, а не JSONP (проверено с JSONlint)

+0

Что такое ответ, зарегистрированный в сетевой вкладке ... может быть, это не ответ jsonp –

+0

есть ли в вашем браузере какая-либо другая ошибка console –

+2

Я думаю, что ваши заголовки '{}' не закрыты, у вас есть опечатка! это? –

ответ

3

Когда вы говорите «это ошибка», я думаю, что вы получите alert(2). Для того, чтобы выяснить, почему, бревенчатый аргументы функции в консоли:

... 
error: function() { 
    console.log('error', arguments); 
}, 
... 

JQuery будет передавать дополнительную информацию (например сообщение об ошибке) функции. Это поможет вам понять, почему это не удается.

То же самое верно для функции success, которая получает ответ сервера, например.

[EDIT]

Я получаю ошибку jsonCallback was not called

Это означает, что ваш сервер не возвращает JSONP. JSONP выглядит как name({...}), а обычный JSON выглядит как {...}. Проверьте конфигурацию своего сервера и убедитесь, что он фактически поддерживает JSONP и что ответ выглядит корректно.

я видел это из вашего кода:

dataType: 'jsonp' 
headers: { 
    'Accept': 'application/json', //this is required by the server 
} 

Это означает, что вы посылаете микс JSONP/JSON, который не может работать. Если вы используете определенный dataType, тогда пусть jQuery построит правильные заголовки.

+0

Здравствуйте, Спасибо за ваше предложение. Я получаю сообщение об ошибке «jsonCallback не был вызван». Я только что попробовал несколько способов назвать это, но они не работают. К сожалению, у меня нет времени, чтобы правильно изучить его. Я попробую вечером. – xennex

+0

Это означает, что сервер не возвращает ответ JSONP. Как выглядит ответ с сервера? Измените свой вопрос и добавьте эту информацию. –

+0

Ответ JSON. К сожалению, изменение dataType на JSON означает, что запросы заблокированы из-за той же политики происхождения. Я не вижу пути отсюда (я не могу использовать cors на этом сервере), поэтому я предполагаю, что на этот вопрос будет дан ответ. Мы ценим любые предложения. В противном случае я помечаю ваш ответ как правильный – xennex

0

Вы не можете установить async: false для запроса jsonp из-за его характера, добавив скрипт для обработки метода ответа.

+0

Я удалил его, похоже, ничего не сделал. Спасибо. – xennex

1

Функция успеха имеет аргумент, и из этого аргумента вы можете получить текст ответа.

$.ajax({ 
    type: 'GET', 
    url: myURL, 
    async: false, 
    crossDomain: true, 
    dataType: 'jsonp', 
    jsonpCallback: 'jsonCallback', 
    headers: { 
    'Accept': 'application/json', //this is required by the server 
    'key': key 
    }, 
    success: function(response) { 
    alert(response); 
    alert('1'); 
    }, 
    error: function() { 
    alert('2'); 
    }, 
    complete: function(){ 
    alert('3'); 
    } 
}); 
+0

К сожалению, это ничего не меняет. Спасибо за предложение. – xennex

0
dataType: 'jsonp 

, как вы упомянули, тип данных, которые вы ожидаете от сервера является JSONP, но может быть ваш сервер будет возвращать любой другой формат, а не JSONP .. так что проверить это, какой тип ответ ваш сервер возвращается в разделе Сеть в консоли браузера ...то если это не формат jsonp, измените тип возвращаемого ответа ....

+0

Сайт возвращает JSON (теперь я вижу, что, возможно, неправильно понял, что такое JSONP). к сожалению, изменение его на все остальное блокируется из-за политики перекрестного происхождения. Сервер, к которому я пытаюсь добраться, кажется, не использует корс. – xennex

+0

Я думаю, вы сделали запрос на перекрестный домен. Кросс-доменные запросы и блокируются браузером по умолчанию. JSONP - это способ выполнения междоменных запросов. Вот почему вы не получаете какую-либо ошибку перекрестного домена, пока используете dataType: «jsonp». –

Смежные вопросы