jQuery кросс-доменная загрузка изображений - PullRequest
2 голосов
/ 17 декабря 2011

Хорошо, так в основном. Я вставляю некоторый код JavaScript в веб-страницу, и она загружает изображение с этой страницы на другой сервер. Теперь он работает, когда я запускаю его на своем домене (конечно), но мне нужно отправить запрос multipart / form-data в файл PHP, который мне не принадлежит. Поскольку это просто загрузка, а не простой запрос для получения данных, я не могу использовать jsonp при первоначальном вызове, поскольку ответ не будет в json.

Используя междоменный скрипт Джеймса Падолси, я могу выполнять запросы $ .get и $ .post для разных доменов, но, поскольку я использую $ .ajax, он не работает. Он использует язык запросов Yahoo для подтверждения этого

Это в основном то, как я делаю запрос

$.ajax({
url: 'http://website.com/upload.php',
type: 'POST',
contentType:'multipart/form-data',
data: postData,
success: successCallback,
error : function(XMLHttpRequest, textStatus, errorThrown) {
    console.log('Error');
}
});

Я хочу сделать это полностью на основе JavaScript, чтобы мой сервер не выполнял запрос. Таким образом, я могу получить байты изображения и сделать запрос с помощью JavaScript. Но до сих пор я не могу сделать его междоменным, так как я $ .ajax, чтобы установить тип контента в «multipart / form-data». Есть ли другой способ сделать запрос кросс-доменом с или без YQL?

Выполнение запроса с помощью iframe не будет работать, так как домен iframe изменится, и у меня не будет доступа к ответу.

1 Ответ

3 голосов
/ 17 декабря 2011

Это хорошо известная и сложная проблема для веб-разработки, известная как Политика одинакового происхождения

Javascript предотвращает доступ к большинству методов и свойств для страниц из разных источников.Термин «происхождение» определяется с использованием имени домена, протокола уровня приложения и (в большинстве браузеров) номера порта документа HTML, на котором выполняется сценарий.Считается, что два ресурса имеют одинаковое происхождение, если и только если все эти значения абсолютно одинаковы.

Есть несколько способов обойти это.

  1. Создайте свой собственный прокси
    • Создайте страницу, которая просто перенаправляет запрос на другой сервер и возвращает его ответ
    • или, используйте правила Apache для формирования прокси (см. Ссылку выше)
  2. Использование чужого прокси
  3. Проверьте, соответствует ли третья сторона CORS спецификация
  4. Если вы хотитенемного флэш на вашей странице, попробуйте flXHR
    • , который, как он утверждает, реализуетточный XHR API, а также имеет JQuery плагин

Это в значительной степени ваши единственные варианты

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...