0

我是新手sencha touch。我需要在整个jerseyjava 中创建、删除、更新成员记录。这是我的代码

view.js

    Ext.define('bluebutton.view.BlueButton.testing', {
    extend: 'Ext.form.Panel',
    xtype: 'testing',
       requires: [

    'bluebutton.view.BlueButton.TransactionList',
    'bluebutton.view.BlueButton.MemberPopUp',
     'bluebutton.view.BlueButton.MemberDetail',
     'bluebutton.store.BlueButton.MemberList',

    ],
    config: {
     id:'register',
        items :[

              {
                    xtype: 'textfield',
                    name: 'name',
                    label: 'Name'
                },
                {
                    xtype: 'emailfield',
                    name: 'email',
                    label: 'Email'
                },

                 {
                    xtype: 'button',
                    text: 'Send',
                    handler: function(button) {
                        var form = Ext.getCmp('register');
                          values = form.getValues();



        var myStore= new Ext.data.Store({
            model: 'bluebutton.model.BlueButton.MemberList'
        });

            var newModel = Ext.ModelMgr.create({ 'memberId': 1,
                        'name': 2,
                        'imgUrl': 3
                    }, 'bluebutton.model.BlueButton.MemberList');

            myStore.add(newModel);

            myStore.sync();


                    }
                }


        ],


   }

});

Model.js

Ext.define('bluebutton.model.BlueButton.MemberList', {
    extend: 'Ext.data.Model',
    config: {
        idProperty: 'memberModel',
        fields: [
            { name: 'memberId' },
            { name: 'name' },
            { name: 'imgUrl' },
            { name: 'age' },
            { name: 'address' },
            { name: 'pointAvalaible' },
            { name: 'lastVisited' },
        ],


  proxy: {
            type: 'ajax',
            actionMethods: {
                create : 'POST',
                read   : 'POST', // by default GET
                update : 'POST',
                destroy: 'POST'
            },
            url: 'http://localhost:8080/RESTFulExample/rest/json/metallica/testingj'
        },


    }

});

Store.js

Ext.define('bluebutton.store.BlueButton.MemberList', {
    extend: 'Ext.data.Store',
   requires: [
              'bluebutton.model.BlueButton.MemberList'
    ],

    config: {
        grouper: {
            groupFn: function (record) {
                return record.get('name')[0];
            }
        },


           model :'bluebutton.model.BlueButton.MemberList',
           storeId :'memberStore',
           autoLoad:false,
           pageSize: 5,
           clearOnPageLoad: false, 

        data: [


        ]
    }
});

Jersey.java

     @POST
     @Path("/testingj")
//   @Consumes("application/x-www-form-urlencoded")
     @Consumes(MediaType.APPLICATION_JSON)
     public Response too(MultivaluedMap<String, String> form) {
     return Response.status(201).entity(form).build();
 }

但我不断收到此错误

XMLHttpRequest cannot load localhost:8080/RESTFulExample/rest/json/metallica/testingj?_dc=1358408853016. 
Origin localhost is not allowed by Access-Control-Allow-Origin.

请指导我解决方案。

4

1 回答 1

1

由于浏览器对跨源请求的安全约束,您收到此响应,这意味着您只能从 javascript 调用位于同一域中的那些 url。由于您的服务在 8080 帖子上运行,因此浏览器从其他域考虑它。

有多种方法可以进行跨域请求,您应该阅读其中的内容:

  1. jsonp
  2. 在服务器上启用 CORS

但是由于移动设备的安全限制与桌面浏览器的限制不同,因此即使在浏览器中不起作用,同样的事情也可能在移动设备中起作用。有关更多详细信息,请查看:在 Sencha Touch 2 中使用来自服务器的 rest 代理加载存储数据

在您的情况下,我建议您将 JsonP 支持添加到您的服务并使用 JsonP 代理而不是 AJAX 和 REST 代理。

于 2013-01-17T10:34:47.273 回答