【发布时间】:2012-03-02 20:00:57
【问题描述】:
我编写了小书签,它从站点获取图片和视频,并且必须通过 AJAX 将其发送到我的服务器。问题出在跨域 AJAX 请求中 - 我有一个错误:
XMLHttpRequest 无法加载 http://mysite.com/community/bookmarklet/。 Access-Control-Allow-Origin 不允许来源http://www.some-nice-site.com。
如何解决从第三方网站向我的服务器发送数据的问题?
注意:我只使用平面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);
}());
【问题讨论】:
-
一个棘手的技巧可能是使用隐藏的
iframe并将stringify-ed 文本附加到srcURL。只是说.. -
您必须为此使用JSONP。
-
@jakeclarkson,是的 - 就是这样!
-
您必须动态创建一个
<script>元素并将其添加到您的页面,而不是使用XHR。<script>的src应该类似于"http://ilya.beta.rebelmouse.com/community/bookmarklet?callback=JSONPresponse"这样您的服务器就知道将其响应包含在什么 JSfunction中。
标签: javascript ajax cross-domain