2014-01-08 41 views
0

爲什麼如果使用JSON文件foo.json我的代碼可以工作,但如果我將URL更改爲something.com/foo.json,它不起作用?sencha touch rest代理url

這是工作在我的項目:

var store = Ext.create('Ext.data.Store', { 
     model: 'Client', 
     autoLoad: true, 
     autoSync: true, 
     proxy: { 
      type: 'rest', 
      url : 'clients.json', 
      reader: { 
       type: 'json' 
      } 
     } 
    }); 

我想是更換靜態文件的URL:

var store = Ext.create('Ext.data.Store', { 
     model: 'Client', 
     autoLoad: true, 
     autoSync: true, 
     proxy: { 
      type: 'rest', 
      url : 'http://rails-api.herokuapp.com/clients.json', 
      reader: { 
       type: 'json' 
      } 
     } 
    }); 

的clients.json文件是從http://rails-api.herokuapp.com/clients.json複製/粘貼它是相同的數據。

+0

您應該仔細閱讀文檔。您提出請求的服務器應該以'jsonp'類型響應'callback'。如果您在網域上請求的網址不需要使用'jsonp'。 http://docs.sencha.com/extjs/4.2.2/#!/api/Ext.data.proxy.JsonP –

+0

是的,但webservice旨在公開,所以我需要添加回調:)謝謝 –

回答

0

在服務器端,我不得不添加回調,看到這個問題sencha-seems-to-not-like-rails-json也是我不得不從其他類型更改爲jsonp和刪除一些無用的代碼,在結束我的代碼看起來是這樣的:

var store = Ext.create('Ext.data.Store', { 
     model: 'Client', 
     autoLoad: true, 
     autoSync: true, 
     proxy: { 
      type: 'jsonp', 
      url : 'http://rails-api.herokuapp.com/clients.json' 
     } 
    }); 

在服務器端:

def index 
    @clients = Client.all 
    respond_to do |format| 
     format.html 
     format.json { render :json => @clients, :callback => params[:callback] } 
     end 
end 
1

你在哪裏運行你的應用程序?你能夠跟蹤http請求嗎?你的JavaScript控制檯上有任何輸出嗎?

如果我不得不猜測我會說你的問題可能與CORS =>http://en.wikipedia.org/wiki/Cross-origin_resource_sharing有關。

編輯: 請注意,你只需要看看CORS或使用JSONP,如果你正在運行你的應用程序,並在兩個不同的網絡服務器「後端」/API。

大多數人可能會......

  • 一)...在同一個網絡服務器作爲後臺或...
  • B)運行應用程序...使用本機包裝(科爾多瓦, phonegap或sencha cmd自己的包裝)。

在這兩種情況下,您都可以簡單地使用「正常」ajax或其他代理。

+0

我新入sencha ......現在我正在我的個人電腦上運行apache tomcat中的代碼。我會看看CORS,我會告訴你,現在感謝 –

+0

它現在可以工作,告訴我關於CORS是真正有用的@Adrian,但它仍然不能解決整個問題,除非我將類型更改爲jsonp而不是休息。 –