如何在extjs4中的单个请求中向服务器端发送对象数组?

Pra*_*ane 4 javascript extjs extjs4

我在extjs4 MVC工作,我已经陷入了一个问题,即如何在单个请求中发送对象数组.我知道如何将单个对象发送到服务器.

1)这是我的一些控制器代码: -

    check:function () {
    console.log("Inside check function.");
    //creating objects in javascript
    var obj = new Object();
    for (var i = 0; i < 4; i++) {
        var inputs = document.getElementsByName(i);
        var radio = "";
        for (var j = 0; j < inputs.length; j++) {
            if (inputs[j].checked) {
                name = inputs[j].name;
                value = inputs[j].value;
                //obj[i].name1=name;
                obj[i] = {'questionId': name, 'option': value};
                console.log("questionId=" + name + " value=" + value);
                console.log("object name=" + obj[i].questionId + " Object value=" + obj[i].option);

                var check = Ext.ModelManager.create(
                    {
                        questionId: name,
                        option: value,
                    }, 'Balaee.model.qb.QbquestionoptionModel');
                console.log("User Infooooooooo:" + check.get('option'));
            }// End of if statment
        }// End of inner for loop
    }//End of outer for loop
    var storeObject = this.getStore('qb.QbquestionoptionStore');
    storeObject.sync();
    console.log("data send");

}// End of check function
Run Code Online (Sandbox Code Playgroud)

2)型号类:---

Ext.define('Balaee.model.qb.QbquestionoptionModel',{
    extend: 'Ext.data.Model',
    idproperty:'',//fields property first position pk. 
    fields: ['optionId','questionId','isAnswer','option','media','keyword','mediaTypeId',],
    /*associations:[
    {type:'BelongsTo',  model:'Mediatype',  foreignKey:'mediaTypeId'},
    {type:'BelongsTo',  model:'Qbquestion', foreignKey:'questionId'},
    {type:'HasMany',    model:'Qbregistereduserfreequestionawnser', foreignKey:'answerOptionId'},
    ]*/
});
Run Code Online (Sandbox Code Playgroud)

3)这是我的商店:---

Ext.define('Balaee.store.qb.QbquestionoptionStore',{
    extend: 'Ext.data.Store',
    model: 'Balaee.model.qb.QbquestionoptionModel',
    //autoLoad: true,
    proxy:
    {
        type:'ajax',
        api:
        {
            read:'http://localhost/balaee/Balaee/index.php?r=QuestionBank/qbpaper/SetUserAnswer11',
            create: 'http://localhost/balaee/Balaee/index.php?r=QuestionBank/qbpaper/SetUserAnswer12',
            update: 'http://localhost/balaee/Balaee/index.php?r=QuestionBank/qbpaper/SetUserAnswer13',
            //destroy: ,
        },//End of api 
        reader:
        {
            type:'json',
            //root: ,
            //successProperty: ,
        },//End of reader
        writer:
        {
            type:'json',
            root:'data'
        }   
    }//End of proxy
});//End of store
Run Code Online (Sandbox Code Playgroud)

我该怎么解决这个问题?请给出一些建议....

sra*_*sra 6

好吧,首先你必须发送它作为JSON(至少我建议),这很容易做到因为该Ext.Ajax.request()方法支持这个开箱即用

Ext.Ajax.request({
    url: 'YourURL',
    jsonData: YourObjectRef, // can be any object or JSON string
    success: function(response, opts) {
        // your code
    }
});
Run Code Online (Sandbox Code Playgroud)

如果你想用商店做,请使用autoModelfield 的类型.此类型可以包含任何对象.这是一个JSFiddle,其中包含模型中的对象列表.

以下是商店配置的修改.请注意,您可以定义read唯一的APICRUD API.对于后者,不可能让destroy行动未设置.你还需要知道,writer你想要数据进行编码意味着一个root属性,这意味着所有的get发送get都是你想要的.

现在这个代理的作用是:默认情况下batchtrue导致商店在调用同步时立即提交所有更改.如果某个操作有多个更改,则代理将提交一个对象数组而不是一个对象.现在,如果您不关心这一点,现在需要预测是否为每个请求获取了一个对象或一组对象.我们不希望最终出现这样的事情.但allowSingle作家的财产让我们了解这一点.如果将其设置为true,它将始终将一组对象发送回服务器,即使只有一个对象也是如此.你现在知道你每次都得到一个数组.

proxy:{
    type:'ajax',
    api: {
        read:'index.php?r=...',
        create: 'index.php?r=...',
        update: 'index.php?r=...',
        destroy: 'index.php?r=...',
    },
    reader: {
        type:'json',
        root:'data'
    },
    writer: {
        type:'json',
        allowSingle: false
    }   
}
Run Code Online (Sandbox Code Playgroud)