2011-12-17 3 views
2

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

Используя скрипт перекрестного домена Джеймса Падольси, я могу выполнять запросы $ .get и $ .post через домены, но поскольку я использую $ .ajax, это не работает. He uses the Yahoo Query Language to acomplish this

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

$.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 изменится, и у меня не будет доступа к ответу.

+0

Вы могли бы прокси ваш запрос другому серверу через свой собственный домен чтобы избежать проблем с перекрестными доменами. В основном, доступ к другому домену на стороне сервера и возврат ответа – jermel

+0

Я упомянул, что я не хочу использовать ресурсы своего сервера, так как он может использовать сотни запросов в день. – John

+0

Вам абсолютно НЕОБХОДИМО получить доступ к ответу? – jermel

ответ

3

Это хорошо известно и трудной проблемой для веб-разработки, как знать Same Origin Policy

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

Существует несколько способов обойти это.

  1. Create your own proxy
    • Создайте страницу, просто пересылает запрос на другой сервер, и возвращает свой ответ
    • или правила Использование Apache, чтобы сформировать прокси-сервер (см выше ссылке)
  2. Использование чужого прокси
    • Для запросов GET, которые являются типичными Use YQL to access yahoo's proxy
    • Для запросов POST, если третья сторона поддерживает Open Data Tables
    • или какой-то другой публичный прокси
  3. Смотрите, если третья сторона соответствует CORS спецификации
  4. Если вы хотите дать немного вспышки на своей странице, попробуйте flXHR
    • он утверждает, что для осуществления точного XHR апи, а также имеет jquery plugin

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