Как "предварительно обработать" ответ ajax перед отображением в jqGrid - PullRequest
3 голосов
/ 19 августа 2010

Я использую jqGrid для отображения результатов запроса к базе данных.Сценарий php, который выполняет запрос, а затем форматирует результаты в виде XML для потребления jqGrid, также выполняет некоторую проверку ошибок.(Например, он может проверять даты, чтобы убедиться, что они в правильном формате и что начальная дата равна до конечной даты.) Эти виды ошибок отформатированы в XML, но в другомформат, чем успешный запрос.

Я хочу перехватить результат вызова ajax и обработать его по-разному в зависимости от того, содержит ли результат одну из этих пользовательских ошибок.Если ошибок нет, то я бы хотел загрузить результат в jqGrid.Если есть ошибка, я бы просто отобразил на странице без сетки (так как сетка настроена для другого числа столбцов).

То, что я ищу, это правильный подход к тому, какпродолжить (не обязательно фактический код).(Моя проблема не в том, как анализировать XML-ответ, а в том, как его перехватить, чтобы я мог его проанализировать.) Я надеялся использовать события jqGrid, такие как gridComplete или loadComplete, но, похоже, они запускаются после сетка уже загружена.

Ответы [ 2 ]

5 голосов
/ 26 августа 2010

Вот мое окончательное решение.

Мой серверный скрипт возвращает пользовательские ошибки в формате xml:

 <row>
      <code>problem</code>
      <description>End date is before start date.</description>
 </row>

, поэтому я использовал метод ajaxGridOptions, предложенный @Oleg для проверки на наличие ошибоктег, и, если найдено, отобразить сообщение об ошибке:

 ajaxGridOptions:   
        {dataFilter:    
            function(data,dataType){    // preprocess the data
                if ( $(data).find("code").text() == 'problem' ) {   // check for an error in the result
                    $("#list").jqGrid('GridUnload');
                    $("#errormsg").text( $(data).find("description").text() );
                }else{
                    return data;
                }
            }
        }
2 голосов
/ 19 августа 2010

Наилучшим способом для сервера будет отправка ответа, отличного от 200 (скажем, HTTP 500).Затем вы можете обработать сетку loadError или глобальный jQuery ajaxError.

Если вы не можете этого сделать, то вам, вероятно, нужно сделать сетку datatype функцией и выполнить $.ajax самостоятельно.вызов метода addXMLData сетки в случае успеха.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...