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