2011-10-24 57 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傳輸」是服務器端的這個問題?我不知道究竟應該發送回我的客戶什麼樣的數據,使這工作 –