Tratando de entender jqgrid para jquery. ¿Cómo cambio la URL de mi llamada AJAX?

StackOverflow https://stackoverflow.com/questions/1209620

  •  06-07-2019
  •  | 
  •  

Pregunta

Tengo todo funcionando desde el tutorial, reemplazándolo con mis datos, pero es una situación codificada. Por ejemplo, en el tutorial, que es lo que tengo trabajando, tengo:

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'
  }); 
}); 

Pero la url está codificada para extraer datos. El tutorial tiene:

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'
  }); 
}); 

Obviamente, los datos en mi cadena de consulta cambiarán y no siempre querré la misma URL de: http://127.0.0.1/products/index.php/mystuff/test/1/5/productname/desc

Y, el tutorial con example.php necesita variables de cadena de consulta para que pueda obtener los datos correctos, pero nunca muestran esa parte que puedo encontrar. Entonces, ¿cómo cambio la cadena de consulta? ¿Cómo envío elementos dinámicamente? Además, los botones del localizador envían cosas como esta debido a la URL del código:

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

¿Cómo puedo tener una URL como / test / las variables correctas? ¿Cómo puedo cambiar la cadena de consulta?

Gracias por cualquier ayuda. Espero que no sea demasiado obvio. Encontré setGridParam ({url: newvalue}) pero no entendí cómo usarlo .

Aquí está la documentación . El tutorial está en la primera parte, arriba.

EDITAR: Gracias por lo siguiente. Estoy tratando de ver cómo usan setGridParam en su tutorial con example.php. Simplemente tienen example.php y no puedo ver cómo obtuvieron allí las variables de cadena de consulta desde la página html a la página example.php. setGridParam puede ser la forma correcta de lograr esto, pero no es el lugar del ejemplo, por lo que no puedo entender cómo pasaron las variables iniciales de la cadena de consulta.

Sé que puedo hacer esto:

    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()"/>

y que eso volverá a cargar la cuadrícula (lo probé; funciona), pero ¿cómo enviaron los elementos del tutorial en primer lugar? ¿Qué sucede si no quiero que se vuelva a cargar un botón, pero solo paso variables para que se cargue inicialmente?

¿Fue útil?

Solución

Después de haber creado su grilla, puede construir una url y luego especificar esto y activar la rejilla para volver a cargar.

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

Otros consejos

Puedes probar esto:

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

Suponga que ha escrito un código jqgrid js en una función js. Entonces, en ese método, pase su URL dinámicamente en una variable urlGetLst En el código jqgrid tenemos que especificar algunos atributos:

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

Con esta opción, siempre llamará a la url especificada y actualizará jqgrid con datos nuevos.

Y antes de llamar a la función de carga jqgrid con url llamar / ejecutar el siguiente código

$("#jqgridtab").GridUnload();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top