.. / Как передать объект (массив) на сервер через Ext.Ajax.request? Через жопу!

  1. ExtJS-notes

Удивляет не первый раз. При всей навороченности библиотеки, какие-то мелкие вещи сделать в лоб невозможно и приходится искать обходные пути. Передача массива или объекта на сервер в params оказалась непосильной для Ext.Ajax.request.

Но добрый Google вывалил несколько вариантов ответа. Типовой (найдено здесь: http://www.sencha.com/forum/showthread.php?66048-post-an-array-in-ajax-request и еще в нескольких местах, в основном на той же Сенче:

params: { array: Ext.encode(the_array) }

Впрочем такой метод не избавляет от последующего геморроя. Он его только прибавляет. При отправке на сервер ExtJS экранирует кавычки и при декодировании в php все ломается. См. например здесь: http://joekuan.wordpress.com/2010/12/06/posting-json-data-from-ext-js-to-php/

Поэтому Douglas Gintz предложил другой способ, позволяющий не задумываться об этом геморрое ExtJS . Не откажу себе в удовольствии привести его полностью:

function confirmEmailUsers(btn){
   if(btn=='yes'){
       var recArray=new Array();
       var ids=new Array();
       var recArray = mailqueueGrid.getSelectionModel().getSelections();
       for (var i = 0 ; i < recArray.length ;i++) {
          ids[i] = recArray[i].get('id');
       }
      $.ajax({
        type: "POST",
        dataType: 'json',
        url: '/cpsia/?c=form&m=processqueue',
        data: 'ids='+ids,
        success: function(msg){
            alert(msg)
        }
      });
   }
}

Здесь должно быть много нецензурных слов по поводу ExtJS.

Кстати, вместо ExtJS.JSON.encode можно юзать JSON.stringify В IE8, FF 3.5+ должно работать

  1. 2012-05-02
  2. ExtJS-notes
  1. artbuilders.com/?p=356 - Страница с решением от Douglas Gintz
  2. www.spravkaweb.ru/jscript/methods/jsonstringify/ - Справочник по JScript : Методы JScript : Метод JSON.stringify
Go Index Test