2013-11-14 45 views
0

我使用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' 
      } 
     } 
    }); 

我已經嘗試了三天一無所獲。我真的希望有人能幫我解決它。

+2

如果不回答您的實際問題,您可能需要閱讀http://en.wikipedia.org/wiki/Same-origin_policy,http://en.wikipedia.org/wiki/Cross-origin_resource_sharing和http: //en.wikipedia.org/wiki/JSONP瞭解一些全面的一般背景。 – apsillers

+2

您沒有清楚說明您的REST服務正在返回JSONP數據。如果沒有,你最好嘗試啓用CORS而不是嘗試jsonp http://stackoverflow.com/a/5753269/1236044 – jbl

+0

@jbl你說得對。但是我嘗試了多種方法在服務器的響應中添加「Access-Control-Allow-Origin」標頭。比如在/etc/tomcat7/web.xml中添加一個過濾器。在java中的return語句中添加頭文件。但仍然無法工作 – Jane

回答

1

如果您想「嘗試回調」,您必須使用'jsonp'類型的代理,而不是'ajax'。

回調參數將被代理自動添加,但是您的服務器將必須進程它,即使用客戶端要求的實際回調名稱。

This other question將爲您提供客戶端和服務器的完整示例(在答案中)。

相關問題