отправка формы не вызывает обратный вызов

У меня есть форма со стандартной отправкой.

var formDettaglio = new Ext.form.FormPanel({

    title: 'Dettaglio richiesta',
    renderTo: 'divDettaglio',
    url: '/supporto/gestioneDettaglio',
    standardSubmit: true,
    width: '100%',
    forceFit: true,
    layout: {
        type: 'vbox',
        align: 'stretch'
    },
    defaults: {
        border: false
    },
    margin: '0 0 15 0',
    items: [{
            layout: {
                type: 'hbox',
                align: 'stretch'
            },
            margin: '0 10 5 10',
            items: [{
                    xtype: 'combo',
                    fieldLabel: 'Prodotto/Servizio',
                    labelWidth: 100,
                    width: 450,
                    queryMode: 'local',
                    name: 'cbAssets',
                    store: storeAssets,
                    displayField: 'valore',
                    valueField: 'codice'
                }, {
                    flex: 1,
                    xtype: 'label',
                    text: ' '
                }, {
                    xtype: 'textfield',
                    fieldLabel: 'Data chiusura prev.',
                    labelAlign: 'right',
                    labelWidth: 120,
                    width: 250,
                    name: 'textDataPrevista',
                    readOnly: true
                }, {
                    xtype: 'textfield',
                    fieldLabel: 'Stato',
                    labelAlign: 'right',
                    labelWidth: 50,
                    width: 150,
                    name: 'textStato'
                }
            ]
        }, {
            xtype: 'textarea',
            fieldLabel: 'Motivo richiesta',
            labelWidth: 100,
            height: 150,
            margin: '0 10 5 10',
            name: 'textMotivo'
        }
    ],
    dockedItems: [{
            xtype: 'toolbar',
            padding: '2 0 2 0',
            dock: 'bottom',
            ui: 'footer',
            items: [{
                    xtype: 'tbfill'
                }, {
                    xtype: 'button',
                    text: 'Salva',
                    style: "width:100px; height:25px;",
                    handler: function () {
                        if (formDettaglio.getForm().isValid()) {
                            formDettaglio.getForm().submit({
                                params: {
                                    azione: 'SALVA'
                                },
                                success: function (form, action) {
                                    alert('ok');
                                },
                                failure: function (form, action) {
                                    alert('ko');
                                }
                            });
                        } else {
                            alert('Errore!');
                        }
                    }]
            }]
    });

Моя вызываемая функция, /supporto/gestioneDettaglio, отправляет ответ json {"success":true}

Но моя функция успеха не запускается. Я также пробовал с точкой останова на firebug: ни за что. Я получаю обратно пустую страницу именно с фразой... {"success":true}

Что я делаю неправильно? Я отправляю JSON, как и любой другой ответ в своем приложении.


person Bia1974    schedule 16.04.2013    source источник


Ответы (2)


У вас standardSubmit установлено значение true. Если вы хотите выполнить отправку ajax с функцией обратного вызова, вам необходимо установить для свойства standardSubmit значение false.

person Reimius    schedule 16.04.2013
comment
Установка standardSubmit: false, я получаю правильный ответ сервера. Но теперь я не могу понять, почему мои параметры: {azione: 'SALVA'} не отправляются на сервер?!!? Также пробовал с Ext.Ajax.request({url: '/supporto/gestioneDettaglio', params: {azione: 'SALVA'}, form: 'formDettaglio', method:'POST', Success: function(response, opts) { оповещение (успешно); }, сбой: функция (разрешение, выбор) { оповещение (запрос не выполнен); } }); Та же проблема: параметры не работают. Любое предложение??? Спасибо - person Bia1974; 17.04.2013
comment
Добавив в свой Ext.Ajax.request, как указано выше, строку jsonData: { }, теперь параметры корректно отправляются на мой сервер. Кто-нибудь может это объяснить? Я хотел бы понять этот случай... Спасибо - person Bia1974; 17.04.2013
comment
Хорошо. Вы можете использовать исходный пример со значением false для стандартного представления, а затем просто включить в форму скрытое поле с именем: azione и значением: «SALVA», и это должно сработать для вас. - person Reimius; 17.04.2013

Решено с помощью «standardSubmit:false». При нажатии кнопки «Отправить» я позвонил

Ext.Ajax.request({ url: '/supporto/gestioneDettaglio', 
    params: {azione: 'SALVA'},
    jsonData: { }, 
    form: 'formDettaglio', 
    method:'POST', 
    success: function(response, opts) { alert("successfull"); }, 
    failure:function(res,opt) { alert("request failed"); }
});

Я не понимаю, почему запрос Ajax без "jsonData: {}," не передал параметры... Но это нормально. Спасибо!

person Bia1974    schedule 17.04.2013