2011-10-24 56 views
0

OK的JSON响应,我有这样的一段代码,JQuery的:读取服务器

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,只是来回复我把设备ID。但我的问题是有这样的错误

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 &hellip;</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

尝试不用像'$ .getJSON(“192.168.2.10:8080/commapi/comaction/init”,“ – Rafay

回答

2

我们不允许从JavaScript做Cross-site HTTP requests。也就是说,您只能向自己的被请求者域发出AJAX请求。

如果AJAX调用是由与http://192.168.2.10:8080相同的域进行的,则只有使用http://192.168.2.10:8080/commapi/comaction/init AJAX调用才能成功。

作为解决办法,这通常由JSONP完成其通过一个JavaScript callback function这是位于你的页面,并请求在服务器回调函数包裹JSON数据服务器上的JavaScript函数。这是通过创建一个<script></script>标记来执行的,其src属性为AJAX url并附加到HTML body

PS:您的服务器必须有能力包装您的输出数据,这将需要更改您的http://192.168.2.10:8080/commapi/comaction/init代码。

+0

谢谢你的回复。我试过JSONP(这是我第一次听说它),还有另一个错误,如“资源解释为脚本,但与MIME类型应用程序/ JSON传输。”是服务器端的这个问题?我不知道究竟应该将哪种数据发回我的客户端以使其工作 –

+0

请[阅读此](http://blog.altosresearch.com/supporting-the-jsonp-callback-protocol-with -jquery-and-java /)文章,我相信它会帮助你开始。该示例随服务器上的Java和客户端上的jQuery一起提供。 –

+0

谢谢!这非常有帮助。解决了一切!谢谢谢谢谢谢! –

3

这是由于Same Origin Policy换句话说,主机和端口应该是相同的。请致电。

Here is a resouce to get you started.

+0

”)这样的'http://'部分我试过JSONP(这是我第一次听说过它),还有另一个错误,如“资源解释为脚本,但与MIME类型的应用程序/ JSON传输”是服务器端的这个问题?我不知道究竟应该发送回我的客户什么样的数据,使这工作 –