Можно ли отправлять данные в JsonP? Или все данные должны передаваться в строке запроса как запрос GET?
У меня есть много данных, которые мне нужно отправить в службу, кросс-домен, и они слишком велики, чтобы отправлять через строку запроса
Какие есть возможности обойти это?
POST
запросы к другим доменам, если и этот домен, и ваш браузер поддерживаютCORS
. Но совершенно верно, чтоPOST
иJSONP
не совместимы.<script>
тегов, указывающих на другой домен. Единственный способ выполнять запросы POST в браузере - использовать HTML-формы или XMLHttpRequest.Если вам нужно отправить много данных кросс-домен. Обычно я создаю сервис, в который можно позвонить в два этапа:
Сначала клиент отправляет ФОРМУ (отправка разрешена между доменами). Служба сохраняет входные данные в сеансе на сервере (используя GUID в качестве ключа). (клиент создает GUID и отправляет его как часть ввода)
Затем клиент выполняет обычный ввод сценария (JSONP) в качестве параметра, который вы используете тот же GUID, что и в сообщении FORM. Служба обрабатывает ввод из сеанса и возвращает данные в обычном JSONP-режиме. После этого сеанс уничтожается.
Это, конечно, зависит от того, что вы пишете серверную часть.
источник
XMLHttpRequest
вообще не должны быть задействованы. В ответе Per используется обычная отправка формы для выполнения запроса POST, а затем внедрение элемента сценария для выполнения запроса GET.Я знаю, что это серьезная некромантия, но я подумал, что опубликую свою реализацию JSONP POST с помощью jQuery, который я успешно использую для своего виджета JS (он используется для регистрации клиентов и входа в систему):
В основном я использую подход IFrame, как это предлагается в принятом ответе. Что я делаю иначе, так это после отправки запроса, я смотрю, можно ли получить форму в iframe с помощью таймера. Если форма недоступна, это означает, что запрос вернулся. Затем я использую обычный запрос JSONP для запроса статуса операции.
Надеюсь, что кому-то это пригодится. Протестировано в> = IE8, Chrome, FireFox и Safari.
источник
Обычно JSONP реализуется путем добавления
<script>
тега к вызывающему документу, так что URL-адрес службы JSONP - «src». Браузер извлекает источник сценария с помощью транзакции HTTP GET.Теперь, если ваша служба JSONP находится в том же домене, что и ваша вызывающая страница, вы, вероятно, могли бы что-то сколотить с помощью простого
$.ajax()
вызова. Если это не в том же домене, то я не уверен, как это возможно.источник
CORS
тогда это будет возможно, если браузер также поддерживает его. В этих случаях вы будете использовать простой,JSON
а неJSONP
.Вы можете использовать CORS Proxy, используя этот проект . Он будет направлять весь трафик на конечную точку в вашем домене и передавать эту информацию во внешний домен. Поскольку браузер регистрирует все запросы в одном домене, мы можем публиковать JSON. ПРИМЕЧАНИЕ. Это также работает с сертификатами SSL, хранящимися на сервере.
источник
Есть (взломанное) решение, которое я делал много раз, вы сможете публиковать сообщения с помощью JsonP. (Вы сможете отправить форму, размер которой превышает 2000 символов, чем вы можете использовать с помощью GET)
Клиентское приложение Javascript
ЯВА:
PHP:
Поступая таким образом, вы открываете свой сервер для любого почтового запроса, вы должны повторно защитить его, предоставив идентификатор или что-то еще.
С помощью этого метода вы также можете изменить тип запроса с jsonp на json, оба работают, просто установите правильный тип содержимого ответа
jsonp
json
Пожалуйста, не говорите, что ваш сервер больше не будет уважать СОП (та же политика происхождения), но кого это волнует?
источник
<script>
тегов в вашу HTML DOM (черт возьми, вы даже можете использовать их в настольных приложениях, скажем, вы хотите сделать несколько запросов JSON к одному и тому же серверу и хотите использовать имя функции в качестве идентификатора отслеживания запроса, например).Возможно, вот мое решение:
В вашем javascript:
В вашем url.php:
источник