Попытка понять jqgrid для jquery. Как изменить URL-адрес моего вызова AJAX?

У меня есть все, что работает из учебника, заменяя его моими данными, но это жесткая ситуация. Например, в учебнике, в котором я работаю, у меня есть:

jQuery(document).ready(function(){ 
  jQuery("#list").jqGrid({
    url:'http://127.0.0.1/products/index.php/mystuff/test/1/5/productname/desc',
    datatype: 'xml',
    mtype: 'GET',
    colNames:['ProductID','title', 'description','price','tax','notes'],
    colModel :[ 
      {name:'invid', index:'invid', width:55}, 
      {name:'invdate', index:'invdate', width:90}, 
      {name:'amount', index:'amount', width:80, align:'right'}, 
      {name:'tax', index:'tax', width:80, align:'right'}, 
      {name:'total', index:'total', width:80, align:'right'}, 
      {name:'note', index:'note', width:150, sortable:false} ],
    pager: jQuery('#pager'),
    rowNum:10,
    rowList:[10,20,30],
    sortname: 'title',
    sortorder: "desc",
    viewrecords: true,
    imgpath: 'http://127.0.0.1/products/public/themes/basic/images',
    caption: 'Product List'
  }); 
}); 

Но URL-адрес жестко закодирован, чтобы вытащить данные. Учебное пособие:

jQuery(document).ready(function(){ 
  jQuery("#list").jqGrid({
    url:'example.php',
    datatype: 'xml',
    mtype: 'GET',
    colNames:['Inv No','Date', 'Amount','Tax','Total','Notes'],
    colModel :[ 
      {name:'invid', index:'invid', width:55}, 
      {name:'invdate', index:'invdate', width:90}, 
      {name:'amount', index:'amount', width:80, align:'right'}, 
      {name:'tax', index:'tax', width:80, align:'right'}, 
      {name:'total', index:'total', width:80, align:'right'}, 
      {name:'note', index:'note', width:150, sortable:false} ],
    pager: jQuery('#pager'),
    rowNum:10,
    rowList:[10,20,30],
    sortname: 'id',
    sortorder: "desc",
    viewrecords: true,
    imgpath: 'themes/basic/images',
    caption: 'My first grid'
  }); 
}); 

Очевидно, что данные в моей строке будут меняться, и я не всегда хочу иметь тот же URL: http://127.0.0.1/products/index.php/mystuff/test/1/5/productname/desc

И учебник с example.php нуждается в переменных запроса, чтобы он мог получить нужные данные, но они никогда не показывают ту часть, которую я могу найти. Итак, как мне изменить запрос? Как я могу отправлять элементы динамически? Кроме того, кнопки пейджера посылают такие вещи из-за URL-адреса жесткого кода:

http://127.0.0.1/products/index.php/mystuff/test/1/5/productname/desc?page=2&rows=10&sidx=productname&sord=desc&nd=1248988261293&_search=false

Как я могу получить URL-адрес, например /test/right? Как изменить строку запроса?

Спасибо за любую помощь. Надеюсь, это не слишком очевидно. Я нашел setGridParam ({url: newvalue}), но не понял, как его использовать.

Вот документация. Учебник находится в первой части, сверху.

EDIT: Спасибо за ниже. Я пытаюсь понять, как они используют setGridParam в своем учебнике с example.php. У них просто есть example.php, и я не вижу, как они получили переменные запроса от страницы html на странице example.php. setGridParam может быть правильным способом выполнить это, но в этом примере это не так, поэтому я не могу понять, как они передавали начальные переменные запроса.

Я знаю, что могу это сделать:

    function gridSearch()
    {
        $("#list").setGridParam(
            {

                  url:"http://127.0.0.1/products/index.php/mystuff/test/1/5/productname/desc",
                page:1
            }
            ).trigger("reloadGrid");//Reload grid trigger
        return false
    }

<input id="sData" class="EditButton" type="submit" value="Search" onClick="return gridSearch()"/>

и это перезагрузит сетку (я ее протестировал, она работает), но как они отправили элементы в учебнике в первую очередь? Что делать, если я не хочу, чтобы кнопка перезагружалась, а просто передавала переменные для ее первоначальной загрузки?

Ответы

Ответ 1

После того, как вы создали свою сетку, вы можете создать URL-адрес, а затем указать это и вызвать перезагрузку сетки.

jQuery("#list").jqGrid().setGridParam({url : 'newUrl'}).trigger("reloadGrid")

Ответ 2

Вы можете попробовать следующее:

jQuery("#list")
    .jqGrid()
    .setGridParam({
        data:'xml',
        url : 'newUrl'
    })
    .trigger("reloadGrid");

Ответ 3

Предположим, вы написали jqgrid js-код в js-функции. Таким образом, этот метод динамически передает ваш url в переменной urlGetLst В коде jqgrid мы должны указать некоторые атрибуты:

url: urlGetLst,//(will be dynamic)
//and
loadonce: false

С помощью этой опции он будет каждый раз давать вызов указанному URL и обновлять jqgrid со свежими данными.

И перед вызовом функции загрузки jqgrid с url вызовите/выполните ниже код

$("#jqgridtab").GridUnload();