Я использую jqGrid для отображения результатов поиска. Когда кнопка поиска нажата, она делает это:
$("#Search").jqGrid('setGridParam', { url: url }).trigger("reloadGrid");
Где url
содержит поисковые параметрические усилители, например:
var url ="/search?first=joe&last=smith"
Веб-сервер получает этот URL и отвечает соответственно. Но на стороне клиента это бросает эту ошибку в jqgrid.min.js строку 21:
Syntax error:
}); b.fn.jqGrid = function(f) {
Что я могу сделать для фиксации этого? Я использую jqGrid sucessfully во многих других местах, но это - единственное, где я изменяю URL и перезагрузку.
Попробуйте использовать неминифицированная версия на этой странице, чтобы узнать больше о том, почему она окружена. То, что вы видите, - это остановка синтаксического анализа; Я подозреваю, что ваша ошибка еще больше. Таким образом, вы можете увидеть, используется ли текущий URL-адрес и что его сбрасывает.
Мне кажется, что ошибка, которую вы имеете в jqgrid.min.js, соответствует ошибке в несжатой версии jqGrid непосредственно в начале .jqGrid('setGridParam', { url: url })
(см. строку 82 в grid.base.js). Это часть так называемого "нового API", представленного в версии 3.6 jqGrid. Фрагмент кода начинался со следующих строк:
$.fn.jqGrid = function( pin ) {
if (typeof pin == 'string') {
var fn = $.fn.jqGrid[pin];
if (!fn) {
throw ("jqGrid - No such method: " + pin);
}
var args = $.makeArray(arguments).slice(1);
return fn.apply(this,args);
}
//...
Я не уверен, почему у вас возникла "синтаксическая ошибка", но я рекомендую вам проверить, действительно ли id грида является "Search". Если вы не найдете ошибку, добавьте больше информации в ваш вопрос. Например: какую версию jQuery вы используете? Также было бы полезно включить фрагмент кода и порядок JavaScripts, которые вы загружаете.
Вместо установки url вы должны попробовать что-то вроде этого.
Я использую это для пользовательских выпадающих элементов, которые я добавляю в сетку. В основном я условно добавляю 2 выпадающих поля в верхний раздел панели инструментов сетки для быстрого поиска.
var toolbarspan = $("<span>");
if (tblDef.State != null) {
$("<label>").attr("for", "selectState").append(" State: ").appendTo("#t_colch")
$("<select>").attr("id", "selectState")
.append($("<option>").attr({selected: true, value: "O"}).append("Open"))
.append($("<option>").attr("value", "C").append("Closed"))
.append($("<option>").attr("value", "B").append("Both"))
.change(selChange)
.appendTo("#t_colch")
}
$("<label>").attr("for", "selectInActive").append(" InActive: ").appendTo("#t_colch")
$("<select>").attr("id", "selectInActive")
.append($("<option>").attr({selected: true, value: "0"}).append("Active"))
.append($("<option>").attr("value", "1").append("InActive"))
.append($("<option>").attr("value", "B").append("Both"))
.change(selChange)
.appendTo("#t_colch");
}
Если вы хотите, чтобы ваши 2 поля также находились на верхней панели инструментов, вам нужно добавить следующее в параметры таблицы.
toolbar: [true, "top"],
Сначала добавьте это в определение таблицы.
beforeRequest: myBeforeRequest(this),
Затем определите функцию myBeforeRequest примерно так.
function myBeforeRequest(grid) {
$(grid).jqGrid("setPostDataItem", "InActive", 0);
var chkVal="";
if ($("#selectInActive").length > 0)
{
chkVal = $("#selectInActive").val();
if (chkVal == "B") $(grid).jqGrid("removePostDataItem", "InActive");
else $(grid).jqGrid("setPostDataItem", "InActive", chkVal);
}
if (tblDef.State != null) {
$(grid).jqGrid("setPostDataItem", "StateCol", tblDef.State);
$(grid).jqGrid("setPostDataItem", "State", "O");
if($("#selectState").length > 0)
{
chkVal = $("#selectState").val();
if (chkVal == "B") $(grid).jqGrid("removePostDataItem", "State");
else $(grid).jqGrid("setPostDataItem", "State", chkVal);
}
}
}
Вы можете сделать то же самое для двух полей поиска, даже убрав их из параметров, если они пустые. В результате получится тот же url, который вы сейчас редактируете вручную. GetRecords.aspx?InActive=0&State=O&StateCol=9 - вот что я сейчас получаю на сервере.
Метод обновления работает. У меня нормально. Это обновляет Даты (до и от) в каждом звонке.
Последние две строки кода творит всю магию.
Я использую его так:
function refreshGrid() {
var gridSel = "#analyticsTbl";
var fromDt = jQuery('#dpFrom').datepicker().val();
var toDt = jQuery('#dpTo').val();
var url = 'myService.asmx/MyWebMethod?fromdt=' + fromDt + '&' + 'todt=' + toDt;
jQuery(gridSel).jqGrid({
url: url,
mtype: "GET",
datatype: "xml",
colNames: ['Product', 'Group', 'Score', 'Date'],
colModel: [
{ name: 'Product', index: 'Product', sortable: true },
{ name: 'Group', index: 'Group', sortable: true },
{ name: 'Score', index: 'Score', sortable: true },
{ name: 'Date', index: 'Date', sortable: true }
],
viewrecords: true,
sortorder: "desc",
caption: "Report",
hidegrid: false,
autowidth: true,
height: "100%"
});
jQuery(gridSel).jqGrid('navGrid', '#pgwidth', { edit: false, add: false, del: false });
jQuery(gridSel).jqGrid('setGridParam', { url: url });
jQuery(gridSel).trigger("reloadGrid");
}