Используйте JSONP для загрузки html-страницы
Я пытаюсь загрузить внешнюю страницу с помощью JSONP
, но страница - это страница HTML
, я просто хочу захватить ее содержимое с помощью ajax.
EDIT: Причина, по которой я делаю это, - это то, что я хочу передать всю пользовательскую информацию ex: headers, ip, agent при загрузке страницы, а не на мои серверы.
Это выполнимо? Прямо сейчас я могу получить страницу, но jsonp пытается разобрать json, возвращая ошибку: Uncaught SyntaxError: Unexpected token <
Пример кода:
$.post('http://example.com',function(data){
$('.results').html(data);
},'jsonp');
Я установил jsfiddle для людей, с которыми нужно протестировать:
http://jsfiddle.net/8A63A/1/
Ответы
Ответ 1
http://en.wikipedia.org/wiki/JSONP#Script_element_injection
Выполнение вызова JSONP (другими словами, для использования этого шаблона использования) требуется элемент script. Поэтому для каждого нового запроса JSONP браузер должен добавить (или повторно использовать) новый элемент - другими словами, вставьте элемент - в HTML DOM, с требуемым значением для атрибут "src". Затем этот элемент оценивается, URL-адрес src извлекается, и оценивается ответ JSON.
Теперь посмотрите на свою ошибку:
Неподготовленный SyntaxError: Неожиданный токен <
<
- это первый символ любого тега html, возможно, это начало <DOCTYPE
, в данном случае это, конечно, недопустимый JavaScript.
И НЕТ, вы не можете использовать JSONP для извлечения html-данных.
Ответ 2
Я сделал то, что хочу, но в моем случае я контролирую код на стороне сервера, который возвращает HTML.
Итак, что я сделал, был обернут код HTML в одном из свойств Json возвращаемого объекта и использовал его на стороне клиента, например:
callback({"page": "<html>...</html>"})
Синтаксическая ошибка, с которой вы столкнулись, потому что библиотека, которую вы используете, ожидает json, но ответ - это HTML, только это.
Ответ 3
У меня есть три слова для вас: Одинаковая политика происхождения
Если удаленный URL-адрес фактически не поддерживает надлежащие запросы JSONP, вы не сможете делать то, что вы пытаетесь сделать. И это хорошо.
Изменить: вы могли бы, конечно, попытаться проксировать запрос через ваш сервер...
Ответ 4
Если вы действительно просто хотите, чтобы клиент зацепил HTML файл, я предлагаю использовать flyJSONP, который использует YQL.. или использует jankyPOST, который использует некоторые сладкие методы:
jankyPOST создает скрытый iframe и заполняет его формой (iframe [0].contentWindow.document.body.form.name).
Затем он использует HTML5 (смотреть устаревшие браузеры!) API webMessaging для публикации в другом iframe и устанавливает флаги элементов iframe формы, которые вы указали.
Отдает форму удаленному серверу... done.
Или вы могли бы просто использовать PHP curl, разобрать его, эхо и т.д.
IDK, если именно он использует его, но надеюсь, что это поможет.
ТАКЖЕ...
Я уверен, что вы можете JSONP что-либо, что является результатом кода сервера. Я сделал это с помощью ClientLogin, просто выполнив JSONPing на странице keyGen и успешно завершил запись в журнал, даже если это были теги b/w. У меня были некоторые другие ошибки, но я считаю, что я очистил этот вывод.
В настоящее время я пытаюсь сделать то, что вы есть, поэтому я отправлю сообщение в случае успеха.
Ответ 5
Я не думаю, что это возможно. JSONP требует, чтобы ответ отображался правильно.
Если вы хотите другое решение, как насчет загрузки URL-адреса в iframe и попытки поговорить через iframe. Я не на 100% уверен, что это сработает, но это стоит того.
Ответ 6
Сначала вызовите URL AJAX вручную и посмотрите на полученный HTML-код.
Во-вторых, вам нужно закрыть свой DIV в своем примере скрипта.