我使用jQuery的getJSON方法和Extjs中的一個方法從服務器獲取一些json數據。當我試圖從服務器獲取JSON數據時出現一些錯誤
將Javascript代碼放在服務器A上的apache2上,並將web服務放在服務器A上的tomcat7上。但是當我使用主機B訪問javascript時,以及javascript代碼中的方法調用web服務。請求由主機B發送到服務器A,對不對?
但我得到一個錯誤:
XMLHttpRequest cannot load http://192.168.5.107:8080/restful/product/all/?callback=?&_dc=1384439969320&page=1&start=0&limit=25. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://192.168.5.107' is therefore not allowed access.
而且我到
?callback=?
添加到我的網址。
但我用我的jQuery代碼得到另一個名爲「Uncaught SyntaxError:Unexpected token:」的錯誤。我搜索了這個,大部分人的建議是取消回調。但我必須使用它,否則我無法獲取JSON數據。
下面是使用jQuery我的代碼:
$.getJSON('http://192.168.5.115:8080/restful/standard/id/' + id, function(data) {
console.log('old data:\n');
console.log(data); // use data as a generic object
oldObj = data;
var newObj = Object.keys(oldObj).map(function(k) {
return { key: k, value: oldObj[k] };
});
console.log('new data:\n');
console.log(newObj); // use data as a generic object
});
即使我添加回調參數。 Extjs中的代碼仍然會出現第一個錯誤。
這裏是我的ExtJS的代碼:
// create the data store
var store = Ext.create('Ext.data.Store', {
model: 'Product',
proxy: {
type: 'ajax',
url : 'http://192.168.5.115:8080/restful/product/all/?callback',
reader: {
type: 'json'
}
}
});
我已經嘗試了三天一無所獲。我真的希望有人能幫我解決它。
如果不回答您的實際問題,您可能需要閱讀http://en.wikipedia.org/wiki/Same-origin_policy,http://en.wikipedia.org/wiki/Cross-origin_resource_sharing和http: //en.wikipedia.org/wiki/JSONP瞭解一些全面的一般背景。 – apsillers
您沒有清楚說明您的REST服務正在返回JSONP數據。如果沒有,你最好嘗試啓用CORS而不是嘗試jsonp http://stackoverflow.com/a/5753269/1236044 – jbl
@jbl你說得對。但是我嘗試了多種方法在服務器的響應中添加「Access-Control-Allow-Origin」標頭。比如在/etc/tomcat7/web.xml中添加一個過濾器。在java中的return語句中添加頭文件。但仍然無法工作 – Jane