Как отправить данные с внешнего сайта на мой сервер через AJAX? - PullRequest
0 голосов
/ 19 декабря 2011

Мне написан букмарклет, который берет фотографии и видео с сайта и должен отправить его на мой сервер через AJAX. Проблема в междоменном запросе AJAX - у меня ошибка:

XMLHttpRequest не может загрузить http://mysite.com/community/bookmarklet/. Источник http://www.some -nice-site.com не разрешен Access-Control-Allow-Origin.

Как решить проблему отправки данных на мой сервер с сайтов третьих лиц?

Примечание: я использую только плоский javascript, это условие разработки.

мой код:

function getXmlHttp(){
  var xmlhttp;
  if (typeof XMLHttpRequest!='undefined') {
    xmlhttp = new XMLHttpRequest();
  } else {      
    try {
      xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (E) {
        xmlhttp = false;
      }
    }  
  };  
  return xmlhttp;
};

function vote(data) {
  var req = getXmlHttp();
  req.onready = function() {
    if (req.readyState == 4 & req.status == 200) {
      alert('OK');
    }
  }
  req.open('GET', 'http://mydomain.com/community/bookmarklet/');
  req.send(JSON.stringify(data()));
};

function dataProcessing(){
  //some processing
  return data;
};

// I tried it, but not deeply understand.
function JSONPresponse(){
  document.getElementById('popup_body').innerHTML = 'done!';
};
(function(){
  function pasteIt(){
    // this function is builds the form, which get data for dispatch to my server.
  };

  pasteIt();
  document.getElementById('my_button').addEventListener('click', function()    {vote(dataProcessing)}, false);
}());

Ответы [ 2 ]

0 голосов
/ 20 декабря 2011

Как сказал @jakeclarkson, JSON-P - не единственное, но полезное решение для меня.

XMLHttpRequest больше не нужен.Вместо этого функция vote(data) создает скрипт для построения URL с параметрами:

function vote(data) {
  var script = document.createElement('script'),
  data = JSON.stringify(data());
  script.type = 'text/javascript';
  script.src = 'http://mysite.com/api/bookmarklet/?vids='+encodeURIComponent(data);
  document.getElementsByTagName('head')[0].appendChild(script);
};

Сценарий выполнен, поэтому URL вызывается, а параметры уже находятся на сервере.

0 голосов
/ 19 декабря 2011

Совершенно очевидно ... сайт, на который вы пытаетесь установить соединение, запрещает подключение извне. Вы можете попробовать, изменив ваши http заголовки в запросе. См:

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