JQuery:读取服务器的JSON响应

时间:2011-10-24 10:41:04

标签: jquery json

好的,我有这段代码,

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 &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进行传输。

2 个答案:

答案 0 :(得分:3)

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

要解决此问题,请查看JSONP

Here is a resouce to get you started.

答案 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代码的输出数据。