У службы AngularJS $ http есть проблема с CORS. Но он должен работать в JSONP, верно? [Дубликат]

Интересно, что ни один из ответов на этой странице не упоминает два крайних случая, надеюсь, никто не возражает, если я их добавлю:

Случай с краем # 1: одновременный доступ к Словарю

Родовые словари в .NET не являются потокобезопасными, а иногда могут бросать NullReference или даже (чаще) a KeyNotFoundException при попытке получить доступ к ключу из двух параллельных потоков. Исключение в этом случае является довольно ошибочным.

Случай с краем # 2: небезопасный код

Если код NullReferenceException задан кодом unsafe, вы можете посмотреть на переменные указателя , и проверьте их на IntPtr.Zero или что-то в этом роде. Это одно и то же («исключение нулевого указателя»), но в небезопасном коде переменные часто переводятся в типы значений / массивы и т. Д., И вы ударяете головой о стену, задаваясь вопросом, как тип значения может исключение.

(Еще одна причина для небезопасного использования небезопасного кода, если вам это нужно)

21
задан Korvin Szanto 23 September 2011 в 17:05
поделиться

6 ответов

http://en.wikipedia.org/wiki/JSONP#Script_element_injection

Выполнение вызова JSONP (другими словами, для использования этого шаблона использования) , требуется элемент сценария. Поэтому для каждого нового запроса JSONP браузер должен добавить (или повторно использовать) новый элемент - другими словами, вставить элемент в HTML DOM с требуемым значением для атрибута «src». Затем этот элемент оценивается, URL-адрес src извлекается и оценивается JSON-ответ.

Теперь посмотрим на вашу ошибку:

Uncaught SyntaxError: Unexpected token & lt;

< - это первый символ любого тэга html, возможно, это начало <DOCTYPE, в данном случае, это , конечно , недопустимый JavaScript.

И НЕТ, вы не можете использовать JSONP для извлечения html-данных.

14
ответ дан c69 28 August 2018 в 05:02
поделиться

Если вы действительно хотите использовать клиента для блокировки HTML-файла, я предлагаю использовать flyJSONP, который использует YQL .. или использует jankyPOST, который использует некоторые сладкие методы:

jankyPOST создает скрытый iframe и заполняет его формой (iframe [0] .contentWindow.document.body.form.name).

Затем он использует HTML5 (смотреть устаревшие браузеры!) API webMessaging для публикации в другом iframe и устанавливает iframe's

Отправляет форму на удаленный сервер ... done.

Или вы можете просто использовать завиток PHP, проанализировать его, эхо и т. д.

IDK, если что именно ур использует его, но я надеюсь, что это поможет.

ТАКЖЕ ... Я уверен, что вы можете JSONP что-либо, что является результатом кода сервера. Я сделал это с помощью ClientLogin, просто выполнив JSONPing на странице keyGen и успешно завершил запись в журнал, даже если это были теги b / w. У меня были некоторые другие ошибки, но я считаю, что я очистил этот вывод.

В настоящее время я пытаюсь сделать то, что вы есть, поэтому я отправлю сообщение в случае успеха.

2
ответ дан Cody 28 August 2018 в 05:02
поделиться

Сначала вызовите URL-адрес AJAX вручную и посмотрите на полученный HTML-код.

Во-вторых, вам нужно закрыть свой DIV в своем примере скрипта.

-2
ответ дан Diodeus - James MacFarlane 28 August 2018 в 05:02
поделиться

Я не думаю, что это возможно. JSONP требует, чтобы ответ отображался правильно.

Если вы хотите другое решение, как насчет загрузки URL-адреса в iframe и попытки поговорить через iframe. Я не на 100% уверен, что он сработает, но это того стоит.

0
ответ дан jesse reiss 28 August 2018 в 05:02
поделиться

Я сделал то, что вы хотите, но в моем случае я контролирую код на стороне сервера, который возвращает HTML. Итак, что я сделал, был обернут код HTML в одном из свойств Json возвращаемого объекта и использовал его на стороне клиента, например:

callback({"page": "<html>...</html>"})

Синтаксическая ошибка, с которой вы сталкиваетесь, потому что библиотека вы используете expects json, но ответ - это HTML, только это.

12
ответ дан martosoler 28 August 2018 в 05:02
поделиться

У меня есть три слова для вас: Same Origin Policy

Если удаленный URL-адрес фактически не поддерживает правильные запросы JSONP, вы не сможете делать то, re пытается. И это хорошо.

Изменить: вы могли бы, конечно, попытаться проксировать запрос через ваш сервер ...

2
ответ дан vzwick 28 August 2018 в 05:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: