JSON veri ile jqGrid boş olarak tablo işler

9 Cevap php

Ben bir jqGrid oluşturmak çalışıyorum, ancak masa boş. Tablo işler, ancak veri görünmüyor.

Ben geri php çağrı alıyorum veriler:

{
"page":"1",
"total":1,
"records":"10",
"rows":[
{"id":"2:1","cell":["1","image","Chief Scout","Highest Award test","0"]},
{"id":"2:2","cell":["2","image","Link Badge","When you are invested as a Scout, you may be eligible to receive a Link Badge. (See page 45)","0"]},
{"id":"2:3","cell":["3","image","Pioneer Scout","Upon completion of requirements, the youth is invested as a Pioneer Scout","0"]},
{"id":"2:4","cell":["4","image","Voyageur Scout Award","Voyageur Scout Award is the right after Pioneer Scout.","0"]},
{"id":"2:5","cell":["5","image","Voyageur Citizenship","Learning about and caring for your community.","0"]},
{"id":"2:6","cell":["6","image","Fish and Wildlife","Demonstrate your knowledge and involvement in fish and wildlife management.","0"]},
{"id":"2:7","cell":["7","image","Photography","To recognize photography knowledge and skills","0"]},
{"id":"2:8","cell":["8","image","Recycling","Demonstrate your knowledge and involvement in Recycling","0"]},
{"id":"2:10","cell":["10","image","Voyageur Leadership ","Show leadership ability","0"]},
{"id":"2:11","cell":["11","image","World Conservation","World Conservation Badge","0"]}
]}

Javascript yapılandırma böylece gibi görünüyor:

$("#"+tableId).jqGrid ({
    url:'getAwards.php?id='+classId,
    dataType : 'json',
    mtype:'POST',
    colNames:['Id','Badge','Name','Description',''],
    colModel : [
        {name:'awardId', width:30, sortable:true, align:'center'},
        {name:'badge', width:40, sortable:false, align:'center'},
        {name:'name', width:180, sortable:true, align:'left'},
        {name:'description', width:380, sortable:true, align:'left'},
        {name:'selected', width:0, sortable:false, align:'center'}
        ],
    sortname: "awardId",
    sortorder: "asc",
    pager: $('#'+tableId+'_pager'),
    rowNum:15,
    rowList:[15,30,50],
    caption: 'Awards',
    viewrecords:true,
    imgpath: 'scripts/jqGrid/themes/green/images',
    jsonReader : { 
        root: "rows", 
        page: "page", 
        total: "total", 
        records: "records", 
        repeatitems: true, 
        cell: "cell", 
        id: "id",
        userdata: "userdata", 
        subgrid: {root:"rows", repeatitems: true, cell:"cell" } 
    },
    width: 700,
    height: 200
});

HTML gibi görünüyor:

<table class="awardsList" id="awardsList2" class="scroll" name="awardsList" />
<div id="awardsList2_pager" class="scroll"></div>

Ben varsayılan tutmaya çalıştık, çünkü JsonReader tanımlamak için gerekli emin değilim. Php kod yardımcı olacaktır, ben bunu da gönderebilirsiniz.

9 Cevap

Ben çalışmak lazım!

dataType alan olmalıdır datatype. Bu durum hassas.

Sorun da occures Eğer daha önce komut jquery.jqGrid.min.js eklediğinizde grid.locale-en.js. Kontrolörün yöntem çağrısı ile herhangi bir sorun varsa, bu kontrol edin.

JqGrid 3,6 jqGrid 3.7.2 göç zaman ben aynı sorunu yaşadı. Sorun (json spec gerektirdiği gibi) benim JSON düzgün çift tırnaklı değil idi. jqGrid 3.6 benim geçersiz JSON tolere ama jqGrid 3.7 katıdır.

Buraya bakın: http://simonwillison.net/2006/Oct/11/json/

Invalid:

{
page:"1",
total:1,
records:"10",
rows:[
    {"id":"2:1","cell":["1","image","Chief Scout","Highest Award test","0"]},
    {"id":"2:2","cell":["2","image","Link Badge","When you are invested as a Scout, you may be eligible to receive a Link Badge. (See page 45)","0"]},
    {"id":"2:3","cell":["3","image","Pioneer Scout","Upon completion of requirements, the youth is invested as a Pioneer Scout","0"]}
]}

Valid:

{
"page":"1",
"total":1,
"records":"10",
"rows":[
    {"id":"2:1","cell":["1","image","Chief Scout","Highest Award test","0"]},
    {"id":"2:2","cell":["2","image","Link Badge","When you are invested as a Scout, you may be eligible to receive a Link Badge. (See page 45)","0"]},
    {"id":"2:3","cell":["3","image","Pioneer Scout","Upon completion of requirements, the youth is invested as a Pioneer Scout","0"]}
]}

Ben de çalışmak var: datatype Doğru yazım - bu örnekte bu şekilde gösterilen ancak yanlış almak kolay oldu böylece everything else kütüphanede ile tutarsız oluyor

Etrafa bu seyrek belgeleri takip ve ben gerçekten doğru ve JavaScript kullanarak uygun olan JSON, gibi hissediyorum çok yorgun alıyorum, gerçekten XML lehine kısa kapsama verilmiştir. Birlikte Python ve JavaScript, JSON yoluyla, gerçekten çok güçlü bir arada, ama bu özel kütüphane ile sürekli bir mücadele.

Alternatif olan herkes:

1> Düzgün jQuery UI temaları destekler (yuvarlatılmış köşeleri dahil!) (Http://datatables.net temalar için çok güzel desteği vardır)

2> verir sütunları yeniden boyutlandırma (http://datatables.net kutudan bu desteklemez)

3> verir alt ızgaraları (http://datatables.net bir olay üzerinden, sen burada istersen sağlar)

lütfen bana bildirin. Ben kombine bunun tüm geri kalanı üzerinde daha benim bu arayüzde bir parçası üzerinde daha fazla zaman geçiriyorum ve bu çalışma örnekleri ve sadece can sıkıcı oluyor "çalıştığınız şeyler" ararken harcanan her zaman.

S

Bu bir eski sonrası olabilir ama ben sadece başkalarına yardım etmek için benim başarı yayınlayacağız.

JSON bu formatta olması gerekir:

{
"rows": [
    {
        "id": 1,
        "cell": [
            1,
           "lname",
            "fname",
            "mi",
            phone,
            "cell1",
            "cell2",
            "address",
            "email"
        ]
    },
    {
        "id": 2,
        "cell": [
            2,
            "lname",
            "fname",
            "mi",
            phone,
            "cell1",
            "cell2",
            "address",
            "email"
        ]
    }
]

}

Eğer gibi hissediyorum eğer bunu kullanabilirsiniz böylece ve ben Zend Bu modeli yazdı. Istediğiniz kadar işleyin.

public function fetchall ($sid, $sord)
{
    $select = $this->getDbTable()->select(Zend_Db_Table::SELECT_WITH_FROM_PART);
    $select->setIntegrityCheck(false)
           ->join('Subdiv', 'Subdiv.SID = Contacts.SID', array("RepLastName" => "LastName", 
                                                                "Subdivision" => "Subdivision",
                                                                "RepFirstName" => "FirstName"))
           ->order($sid . " ". $sord);

    $resultset = $this->getDbTable()->fetchAll($select);
    $i=0;
    foreach ($resultset as $row) {
        $entry  = new Application_Model_Contacts();

        $entry->setId($row->id);
        $entry->setLastName($row->LastName);
        $entry->setFirstName1($row->FirstName1);
        $entry->setFirstName2($row->FirstName2);
        $entry->setHomePhone($row->HomePhone);
        $entry->setCell1($row->Cell1);
        $entry->setCell2($row->Cell2);
        $entry->setAddress($row->Address);
        $entry->setSubdivision($row->Subdivision);
        $entry->setRepName($row->RepFirstName . " " . $row->RepLastName);
        $entry->setEmail1($row->Email1); 
        $entry->setEmail2($row->Email2);

        $response['rows'][$i]['id'] = $entry->getId(); //id
        $response['rows'][$i]['cell'] = array (
                                                $entry->getId(),
                                                $entry->getLastName(),
                                                $entry->getFirstName1(),
                                                $entry->getFirstName2(),
                                                $entry->getHomePhone(),
                                                $entry->getCell1(),
                                                $entry->getCell2(),
                                                $entry->getAddress(),
                                                $entry->getSubdivision(),
                                                $entry->getRepName(),
                                                $entry->getEmail1(),
                                                $entry->getEmail2()
                                            );
        $i++;

    }
    return $response;
}

Adamlar sadece bu size yardım etmek istiyorum. Ben çalıştım şunlar var:

JSON

var mydata1 = { "page": "1", "total": 1, "records": "4","rows": [{ "id": 1, "cell": ["1", "cell11", "values1" ] },
    { "id": 2, "cell": ["2", "cell21", "values1"] },
    { "id": 3, "cell": ["3", "cell21", "values1"] },
    { "id": 4, "cell": ["4", "cell21", "values1"] }
]};

//Mark below important line. datatype "jsonstring" worked for me instead of "json".

datatype: "jsonstring",

contentType: "application/json; charset=utf-8",

datastr: mydata1,

colNames: ['Id1', 'Name1', 'Values1'],

colModel: [
      { name: 'id1', index: 'id1', width: 55 },
      { name: 'name1', index: 'name1', width: 80, align: 'right', sorttype: 'string' },
      { name: 'values1', index: 'values1', width: 80, align: 'right', sorttype: 'string'}],

Selamlar,

Benim durumumda, sorun (jqGrid demo alınmıştır) PHP kodu aşağıdaki hattı neden oldu:

$responce->page = $page;

Ben ilk yaratmadan nesne $responce mülkiyet sayfasına erişerek ediyorum: Burada yanlış olmasıdır. Bu Apache aşağıdaki hata iletisi görüntülemek neden:

Strict Standards: Creating default object from empty value in /home/mariusz/public_html/rezerwacja/apps/frontend/modules/service/actions/actions.class.php on line 35

Ve nihayet kullanılan hata iletisi komut dosyası içinde json okuyucuya göndermek için.

Ben boş bir nesne oluşturarak sorunu giderildi:

$responce = new stdClass();

Ben bunu bir int olması gerektiğini düşünüyorum, kimlik türü doğru olduğunu sanmıyorum.

Verilen json için gerçekten JsonReader ayarlarını gerekmez. Ne listeledik zaten varsayılan, artı sizin json bir subgrid yok.

Bu deneyin:

{
"page":"1",
"total":1,
"records":"10",
"rows":[
{"id":1 ,"cell":["1","image","Chief Scout","Highest Award test","0"]},
{"id":2,"cell":["2","image","Link Badge","When you are invested as a Scout, you maybe eligible to receive a Link Badge. (See page 45)","0"]},
{"id":3,"cell":["3","image","Pioneer Scout","Upon completion of requirements, the youth is invested as a Pioneer Scout","0"]},
{"id":4,"cell":["4","image","Voyageur Scout Award","Voyageur Scout Award is the right after Pioneer Scout.","0"]},
{"id":5,"cell":["5","image","Voyageur Citizenship","Learning about and caring for your community.","0"]},
{"id":6,"cell":["6","image","Fish and Wildlife","Demonstrate your knowledge and involvement in fish and wildlife management.","0"]},
{"id":7,"cell":["7","image","Photography","To recognize photography knowledge and skills","0"]},
{"id":8,"cell":["8","image","Recycling","Demonstrate your knowledge and involvement in Recycling","0"]},
{"id":9,"cell":["10","image","Voyageur Leadership ","Show leadership ability","0"]},
{"id":10,"cell":["11","image","World Conservation","World Conservation Badge","0"]}
]}

I was working with WAMP 2.4, I was being crazy with this problem, I tried lot of things, like install previous versions of PHP and like 5.2, een I tried in Windows XP, and lots of jqGrid options. Well thank to Oleg finally and Mariusz I find the only line:

$responce = new stdClass(); 

$ Yanıtta kullanımı tüm çözebileceğini, ve şimdi benim ızgara önce büyük çalışıyor!

Arkadaşlarım teşekkürler.