Tenho alguns exemplos de funcionamento do jqGrid,e ontem eu adicionei um novo. Funcionou bem no meu host local, mas quando o movi para o meu servidor de teste on-line, receberia a tela Carregando e depois nada. Sem erros.
Algumas notas:
1) Usando JSON, baixado tudo de uma vez
2) Funciona bem em localhost no mesmo navegador.
3) A fonte HTML parece idêntica
4) As fontes JS são idênticas
5) os dados JSON são idênticos
6) PHP 5.1 no servidor de teste, PHP 5.3 no local
7) Funciona no Firefox 3 (o problema aparece no Chrome 11 no Linux e no Windows)
8) Nunca tive isso antes em minhas outras configurações de jqGrid.
Alguém já se deparou com algo assim antes? Isso realmente me deixou confuso e não quero começar a depurar o próprio jqGrid.
Editar: Aqui está minha chamada jqGrid:
jQuery(function(){
jQuery("#list1").jqGrid({
url:"/index.php?option=com_coinnet&view=snap&layout=list&Itemid=123&format=json&ajax=1",
datatype: "json",
mtype: "GET",
colNames: ["ID","Date","Dealer","Amount","Check Number","Tracking Number","Deal Done","Note?","Date Sort"],
colModel: [{"name":"id","width":0,"hidden":true,"key":true},{"name":"date_postedstr","width":100,"align":"right","index":"date_posted"},{"name":"stationlink","width":100,"align":"right"},{"name":"amount","width":120,"align":"right","sorttype":"float","formatter":"number","formatoptions":{"decimalSeparator":".","thousandsSeparator":",","decimalPlaces":2}},{"name":"check_number","width":100,"align":"right"},{"name":"tracking_number","width":100,"align":"right"},{"name":"status","width":50,"sortable":false,"align":"right","formatter":"checkbox","formatoptions":{"disabled":"false"}},{"name":"link","width":60,"align":"right","formatter":"showlink","formatoptions":{"idName":"dealID","baseLinkUrl":"","addParam":"&option=com_coinnet&view=snap&layout=deal&Itemid=124"}},{"name":"date_posted","hidden":true,"width":0}],
pager: "#pager1",
loadonce:true,
rowNum:10,
rowList:[5,10,20,25,30,50,100,-1],
sortname: "date_posted",
sortorder: "DESC",
viewrecords: true,
caption: "SNAP Deals",
multiselect:false,jsonReader : {
root:"data",
page: "currpage",
total: "totalpages",
records: "totalrecords",
repeatitems: false,
id: "0"
},
loadComplete: function() {
jQuery("option[value=-1]").text("All");
},
height: "auto",
});
});
E aqui estão os meus dados:
{"data":[{"id":"1654088","my_name":"CT00","my_id":"11920","other_name":"NV23","date_posted":"2010-12-07 14:23:34","check_number":null,"tracking_number":null,"notes":null,"shipped":"F","paid":"F","status":false,"amount":null,"check_number_date":null,"tracking_number_date":null,"newversion":"F","bulletin_id":null,"original_mailbox_id":null,"parcel_carrier_id":null,"date_postedstr":"12/07/2010","link":"Add","stationlink":"<a target="_blank"n href="?option=com_coinnet&view=dealerinfo&Itemid=122&station=NV23">NV23</a>"},{"id":"1631050","my_name":"CT00","my_id":"11920","other_name":"FO81","date_posted":"2010-07-13 09:49:10","check_number":null,"tracking_number":null,"notes":null,"shipped":"F","paid":"F","status":false,"amount":null,"check_number_date":null,"tracking_number_date":null,"newversion":"F","bulletin_id":null,"original_mailbox_id":null,"parcel_carrier_id":null,"date_postedstr":"7/13/2010","link":"Add","stationlink":"<a target="_blank"n href="?option=com_coinnet&view=dealerinfo&Itemid=122&station=FO81">FO81</a>"}],"totalrecords":75,"totalpages=>":8,"currpage":"1","userdata":null}
Respostas:
1 para resposta № 1Não tenho certeza de qual é o principal problema que você tem. Seu código e dados JSON têm alguns pequenos erros que eu recomendo que você corrija. Você pode tentar a versão fixa Aqui. Funciona no Chrome 11.
Pequena lista de pequenos problemas que resolvi:
- Dados JSON contêm
"totalpages=>":8
ao invés de"totalpages":8
, mas porque você usaloadonce:true
parâmetro os dados serão ignorados. - Existem vírgulas finais sob o
height: "auto"
. É o erro de sintaxe, que pode ser ignorado por alguns navegadores (mas não no IE). - O valor que
-1
norowList
está errado. Você deve usar algum número inteiro grande em vez disso. Por exemplo, você pode usarrowList: [5,10,20,25,30,50,100,10000]
e consertar o código noloadComplete
parajQuery("#pager1 option[value=10000]").text("All");
- Se você usar
key:true
para alguma coluna de grade oid
propriedade dojsonReader
será ignorado. - Eu recomendo que você use
width:1
(ou qualquer outro valor positivo) para todas as colunas ocultas em vez dewidth:0
- O contêiner de
colModel
não são dados JSON. É apenas a inicialização do objeto. Assim, você não precisa fazer aspas duplas do nome das propriedades. - Você pode remover todos os parâmetros padrão do jqGrid como
multiselect:false
oumtype: "GET"
- Em vez do uso de longos
url
parâmetrourl:"/index.php?option=com_coinnet&view=snap&layout=list&Itemid=123&format=json&ajax=1"
Eu recomendo que você useurl:"/index.php"
epostData: {option:"com_coinnet", view:"snap", layout:"list", Itemid:123, format:"json", ajax:1 }
. O URL será construído da mesma forma, mas você terá certeza de que os caracteres especiais (incluindo espaços em branco etc.) que podem estar dentro dos valores dos parâmetros serão codificados corretamente, se necessário.
Aqui está o código da versão modificada:
jQuery("#list1").jqGrid({
url:"LarrikJ.json", // "index.php"
postData: {
option: "com_coinnet",
view: "snap",
layout: "list",
Itemid: 123,
format: "json",
ajax: 1
},
datatype: "json",
colNames: ["ID","Date","Dealer","Amount","Check Number","Tracking Number",
"Deal Done","Note?","Date Sort"],
colModel: [
{name:"id",width:1,hidden:true,key:true},
{name:"date_postedstr",width:100,align:"right",index:"date_posted"},
{name:"stationlink",width:100,align:"right"},
{name:"amount",width:120,align:"right",sorttype:"float",formatter:"number",
formatoptions:{decimalSeparator:".",thousandsSeparator:",",decimalPlaces:2}},
{name:"check_number",width:100,align:"right"},
{name:"tracking_number",width:100,align:"right"},
{name:"status",width:50,sortable:false,align:"right",formatter:"checkbox",
formatoptions:{disabled:"false"}},
{name:"link",width:60,align:"right",formatter:"showlink",
formatoptions:{idName:"dealID",baseLinkUrl:"",
addParam:"&option=com_coinnet&view=snap&layout=deal&Itemid=124"}},
{name:"date_posted",hidden:true,width:1}
],
pager: "#pager1",
loadonce: true,
rowNum: 10,
rowList: [5,10,20,25,30,50,100,10000],
sortname: "date_posted",
sortorder: "DESC",
viewrecords: true,
caption: "SNAP Deals",
jsonReader: {
root: "data",
page: "currpage",
total: "totalpages",
records: "totalrecords",
repeatitems: false
},
loadComplete: function() {
jQuery("#pager1 option[value=10000]").text("All");
},
height: "auto"
});
0 para resposta № 2
Eu descobri. A resposta foi realmente encontrada nesta linha da pergunta original:
6) PHP 5.1 no servidor de teste, PHP 5.3 no local
Havia um caractere inválido (mostrado como �) em um dos campos do banco de dados que não estava sendo escapado corretamente no PHP 5.1, mas estava no PHP 5.3.
Eu chamaria isso de bug do Chrome, já que o Firefox lidou comestá bem, e o Chrome deve ter pelo menos gerado um aviso (ele não travou a página, ou travou o javascript, ou qualquer coisa parecida). É possível que o próprio jqGrid esteja suprimindo o aviso, no entanto.