2011-10-22 1 views
3

Я пытаюсь отправить html шаблона с помощью запроса AJAX, и мне нужно использовать JSONP, чтобы не получить ошибку перекрестного происхождения, но сейчас мне нужно установить тип данных как jsonp. В результате ajax получает шаблон, и я получаю сообщение «Uncaught SyntaxError: Неожиданный токен <», а когда я console.log (data), я получаю «jQuery1640440755290677771_1319300298806 не был вызван». Как я могу исправить вызов ajax, чтобы я мог получить свой html для шаблона underscore.js для использования?Как отправить HTML через JSONP

Спасибо.

$.ajax({ 
    url: "url", 
    cache: "false", 
    crossDomain:"true", 
    dataType: "jsonp", 
    beforeSend: function(xhr) { 
     xhr.setRequestHeader("Authorization", "f00"); 
    }, 
    success: function(html) { 
     console.log(html); 
    }, 
    error: function(data) { 
     console.log(data); 
    }, 

ответ

0

Вставить ваш полный JSON, чтобы jsonlint увидеть, что разрушает его. Попробуйте использовать одиночные кавычки в html, например.

+0

Это не JSON, это просто HTML-страница. Это невозможно сделать с вызовом AJAX? – user995469

+0

Если вы установите dataType как jsonp, тогда он ожидает jsonp и выдает ошибку на html. И, как вы сказали, установка dataType как html даст ошибку кросс-исходного кода или ошибку нарушения безопасности на некоторых браузерах. Вам придется написать свой собственный серверный сервис, чтобы обойти это (насколько мне известно). – Lycha

0

Используйте опцию для списка dataType. См. the docs для получения более подробной информации, но TL; DR используется datatype: "jsonp html". В противном случае ожидается, что JSON вернется, а не HTML.

Скорее всего, вам придется обернуть содержимое HTML как JSON, но вы, возможно, уже это делали.

0

JSONP имеет вид:

funcName({"key": "value"}) 

то есть вызов функции передачи объекта. Все, что вам нужно сделать, - это присвоить свой шаблон HTML свойству этого объекта. Результат должен быть:

funcName({"template": "<p>Template</p>"}) 

Необходимо настроить свой сервер соответствующим образом.


Другим вариантом было бы установить заголовок в Access-Control-Allow-Origin: * ответ на ваш сервер (а затем, конечно, не указать json как тип данных в вызове Ajax).

Для получения дополнительной информации см. Cross-Origin Resource Sharing.