Подтвердить что ты не робот

Используйте 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/

4b9b3361

Ответ 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 в своем примере скрипта.