Преобразовать ответ от сервера (объект JSON) в строку в extjs - PullRequest
0 голосов
/ 23 марта 2012

* В нашем коде параметры со страницы Ext JS передаются в контроллер Spring 3, где у нас есть бизнес-логика.Затем в контроллере объект ответа устанавливается с использованием getWriter.write, а ответ извлекается на странице Ext JS.Проблема: при декодировании ответа Firebug выдает ошибку при использовании Ext.util.JSON.decode, поэтому вместо декодирования нашего ответа с сервера нам пришлось использовать Ext.decode.Но Ext.decode дает значение: объект Object.Мне нужно преобразовать его в строку или формат.Код контроллера:

import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping
public class SampleController {

    @RequestMapping(value = "/login.htm",method = RequestMethod.POST)
     @ResponseBody
     public void validateCredentials(@RequestParam("user") String user,
            @RequestParam("password") String password,HttpServletResponse response) {
        boolean flag = false;
        String resultString = null;





        try {
            response.setContentType("application/json");
            response.setHeader("Content-Type", "text/html, charset=utf-8");


            if (user.equals(password)) {


                flag = true;
                resultString = "{success:true}";
            } else {


                flag = false;
                resultString = "{success:false}";
            }

            response.getWriter().write(resultString);

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


    }
}
Ext JS Login form :
Ext.onReady(function(){


    function submit(button,event){


               var uname=Ext.getCmp('user').getValue();
             alert("1"+uname);
                var passWord=Ext.getCmp('password').getValue();

             Ext.Ajax.request({
                   url: 'login.htm',
                   method :'POST',

                   params: {
                       user:uname,
                       password:passWord
                    },
                   success: function(result,request) {
                      var jresp = Ext.JSON.decode(result.responseText); 
//Ext.JSON.decode stores object Object in jresp. Our requirement is converting jresp to String or boolean
                      console.log('Success'+jresp); 



                   },
                   failure: function(response, request) {
                       var jresp = Ext.JSON.decode(result.responseText);
                       console.log(jresp.error);
                      console.log('server-side failure with status code 8 ' + response.status);
                   }
                });





           }




     var myform = new Ext.form.FormPanel({
            title:'Login form',
            frame:true,
            width:400,
            height: 250, 

            url:'login.htm',
            method:'POST',
            renderTo:'div1',
            items:[
                   {
                       xtype:'textfield',
                       fieldLabel:'user',
                       inputType:'user',
                       allowBlank:false,
                       minLengthText:'3',
                       id:'user',
                       name:'user'
                   },
                   {
                       xtype:'textfield',
                       fieldLabel:'password',
                       inputType:'password',
                       allowBlank:false,
                       minLengthText:'3',
                       id:'password',
                       name:'password'
                   }
                   ],
                   buttonAlign:'center',
                   buttons:[
                            {
                                text:'reset',handler:function(){myform.getForm().reset();}
                            },
                            {

                                text:'Login',
                                handler: submit
                            }

                            ]       

                   });






});

Ответы [ 3 ]

0 голосов
/ 22 ноября 2013

Почему бы не передать экземпляр модели, включающий все поля, которые вам нужны в javascript (ExtJs), вы можете использовать Джексона для преобразования вашей модели в JSON.

Просто объявите свой конвертер в appContext:

и включая кувшин Джексона.

Вы также можете поместить успех и сообщение в модель. Для простоты используйте абстрактный ExtJsModel с полями успеха и сообщения и заставьте все ваши модели расширять эту модель.

0 голосов
/ 27 марта 2014

Вы можете отправить такой ответ в extjs. Затем используйте декодер extjs. Вот код.

var jresp = Ext.util.JSON.decode (result.responseText); console.log (jresp.success);

"" "{успех: истинно}" ""

Если вы утешаетесь, как это. console.log ( 'Успех' + jresp.success);

java-скрипт всегда дает объект. Так что не используйте это.

0 голосов
/ 23 марта 2012

При декодировании ответа Firebug выдает ошибку при использовании Ext.util.JSON.decode, поэтому мы должны были использовать Ext.decode вместо того, чтобы декодировать наш ответ от сервера.

вы получили ошибку, потому что вы использовали неправильный объект в ExtJS4, его Ext.JSON.decode для кодирования данных, а не Ext.util.JSON.decode, у вас возникла эта путаница, потому что ExtJS3 имел Ext.util.JSON.decode для парсинг строк JSON, но да, отказоустойчивый способ будет использовать Ext.decode, который является сокращением для правильной функции в ExtJS3 и ExtJS4, оба

Но Ext.decode дает значение: object Object. Мне нужно преобразовать это в Строка или формат

это верно, потому что вы генерируете ответ, подобный "{success:true}", поэтому, когда вы анализируете эту строку JSON, вы получите что-то вроде этого

data = {'success': true};

чтобы вы могли получить логическое значение, используя data.success

поэтому ваш окончательный код будет выглядеть так

var jresp = Ext.JSON.decode(result.responseText); 
console.log('Success'+jresp.success);

еще одна вещь, которую вы генерируете в весеннем MVC, используя эту строку

resultString = "{success: true}";

, которая не является допустимой строкой json, поэтому вам нужно заключить ключ объекта в двойные кавычки примерно так

resultString = "{\" success \ ": true}";

...