sencha touch rest proxy url

时间:2014-01-08 15:13:15

标签: rest extjs sencha-touch-2

为什么如果使用JSON文件foo.json我的代码可以工作,但如果我将URL更改为something.com/foo.json它不起作用?

这在我的项目中有效:

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的复制/粘贴,它是相同的数据。

2 个答案:

答案 0 :(得分:1)

你在哪里运行你的申请?你能跟踪http请求吗?你在javascript控制台上得到任何输出吗?

如果我不得不猜测我说你的问题可能与CORS =>有关。 http://en.wikipedia.org/wiki/Cross-origin_resource_sharing

修改 请注意,如果您正在运行您的应用程序以及两个不同的Web服务器上的“后端”/ api,您只需要查看CORS或使用jsonp。

大多数人可能......

  • a)...在与后端相同的网络服务器上运行应用程序或...
  • b)...使用原生包装(cordova,phonegap或sencha cmd自己的包装)。

在这两种情况下,您只需使用“普通”ajax或休息代理。

答案 1 :(得分: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