/ / jqGrid não carrega dados JSON no Chrome sem erros - json, google-chrome, jqgrid

O jqGrid não carrega dados JSON no Chrome sem erros - json, google-chrome, jqgrid

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 № 1

Nã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ê usa loadonce: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 no rowList está errado. Você deve usar algum número inteiro grande em vez disso. Por exemplo, você pode usar rowList: [5,10,20,25,30,50,100,10000] e consertar o código no loadComplete para jQuery("#pager1 option[value=10000]").text("All");
  • Se você usar key:true para alguma coluna de grade o id propriedade do jsonReader será ignorado.
  • Eu recomendo que você use width:1 (ou qualquer outro valor positivo) para todas as colunas ocultas em vez de width: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 ou mtype: "GET"
  • Em vez do uso de longos url parâmetro url:"/index.php?option=com_coinnet&view=snap&layout=list&Itemid=123&format=json&ajax=1" Eu recomendo que você use url:"/index.php" e postData: {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.