Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何通过AJAX将外部站点的数据发送到我的服务器?_Javascript_Ajax_Cross Domain - Fatal编程技术网

Javascript 如何通过AJAX将外部站点的数据发送到我的服务器?

Javascript 如何通过AJAX将外部站点的数据发送到我的服务器?,javascript,ajax,cross-domain,Javascript,Ajax,Cross Domain,我编写了bookmarklet,它从一个站点拍摄图片和视频,并且必须通过AJAX将其发送到我的服务器。问题出在跨域AJAX请求中-我遇到了一个错误: 无法加载XMLHttpRequest。访问控制不允许原点允许原点 如何解决从第三方网站向我的服务器发送数据的问题? 注意:我只使用平面javascript,这是开发的规定 我的代码: function getXmlHttp(){ var xmlhttp; if (typeof XMLHttpRequest!='undefined') {

我编写了bookmarklet,它从一个站点拍摄图片和视频,并且必须通过AJAX将其发送到我的服务器。问题出在跨域AJAX请求中-我遇到了一个错误:

无法加载XMLHttpRequest。访问控制不允许原点允许原点

如何解决从第三方网站向我的服务器发送数据的问题?

注意:我只使用平面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);
}());

很明显。。。您正在尝试的站点正在禁止与外部世界的连接。您可以尝试在请求中修改http头。见:


正如@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被调用,并且参数已在服务器中。

一个棘手的技巧可能是使用隐藏的
iframe
,并将
字符串化
-ed文本附加到
src
URL。只是说..你必须用这个。@jakeclarkson,是的-就是这个!您需要动态创建
元素并将其添加到页面中,而不是使用XHR。
src
应该类似于
”http://ilya.beta.rebelmouse.com/community/bookmarklet?callback=JSONPresponse“
这样你的服务器就知道用什么函数来包装它的响应了。