好的,我有这段代码,
var record = new Object(); //var aData = {};でもOK
record["deviceID"] = "123456"; //aData["name"] = "hoge"でもoK
$.getJSON("http://192.168.2.10:8080/commapi/comaction/init", {record: JSON.stringify(record)},
function(objRes){
alert(objRes["response"]); //objRes["country"]でもok
});
我刚刚创建了一个简单的servlet,它只是回复我放置的deviceID。但我的问题是有一个像
这样的错误XMLHttpRequest cannot load http://192.168.2.10:8080/commapi/comaction/init?record=%7B%22deviceID%22%3A%22123456%22%7D. Origin file:// is not allowed by Access-Control-Allow-Origin.
我该如何解决这个问题?谢谢!
更新的脚本 我尝试使用JSONP,我生成的脚本看起来像这样
$(document).ready(function() {
$("#ui-2").click(function(){
getJSON("http://192.168.2.143:8080/commapi/comaction/init?record=%7B% 22deviceID%22%3A%22123456%22%7D&callback=loaded");
});
};
function getJSON(url){
var s = document.createElement('script');
s.setAttribute('src',url);
document.getElementsByTagName('head')[0].appendChild(s);
// Loading ..
$("results").innerHTML = '<p>Loading …</p>';
};
function loaded(data) {
var res = data.query.results.item;
var html = "";
var i = 0;
var y = res.length;
for(i; i<y; i++) {
alert(data.deviceID);
}
};
但这是新错误 资源解释为脚本,但使用MIME类型application / json进行传输。
答案 0 :(得分:3)
答案 1 :(得分:2)
我们不允许从JavaScript执行Cross-site HTTP requests
。也就是说,只允许您向自己的被请求者域发出AJAX请求。
如果AJAX调用来自与http://192.168.2.10:8080/commapi/comaction/init
相同的域,则只能使用http://192.168.2.10:8080
AJAX调用成功。
作为一种解决方法,这通常由JSONP
完成,它传递JavaScript callback function
,它是位于页面上的JavaScript函数,并向服务器请求JSON
数据的服务器发送请求具有回调功能。这是通过创建<script></script>
标记并将src
属性设置为AJAX
网址并附加到HTML body
来执行的。
PS:您的服务器必须能够包装您需要更改http://192.168.2.10:8080/commapi/comaction/init
代码的输出数据。