문제

나는 누군가가 이것에 대한 통찰력을 가지고 있는지 궁금했다. JQGRID는이 JSON 문자열에 매우 만족합니다.

{'page':'1','total':1,'records':'4','rows':[{'id':1,'title':'Story Manager','assigned':'2009-06-22T10:52:28.0687738-05:00','due':'2009-07-29T10:52:28.0687738-05:00','completed':'2009-07-14T10:52:28.0687738-05:00'},{'id':2,'title':'Analysis','assigned':'2009-06-22T10:52:28.0687738-05:00','due':'2009-07-29T10:52:28.0687738-05:00','completed':'2009-07-14T10:52:28.0687738-05:00'},{'id':3,'title':'Narrative','assigned':'2009-06-22T10:52:28.0687738-05:00','due':'2009-07-29T10:52:28.0687738-05:00','completed':'2009-07-14T10:52:28.0687738-05:00'},{'id':4,'title':'Graphic','assigned':'2009-06-22T10:52:28.0687738-05:00','due':'2009-07-29T10:52:28.0687738-05:00','completed':'2009-07-14T10:52:28.0687738-05:00'}]}

JayRock (.NET JSON-RPC 프레임 워크) JSON 문자열을 다음과 같이 공급합니다.

{id:'-1','result':{'page':'1','total':1,'records':'4','rows':[{'id':1,'title':'Story Manager','assigned':'2009-06-22T10:52:28.0687738-05:00','due':'2009-07-29T10:52:28.0687738-05:00','completed':'2009-07-14T10:52:28.0687738-05:00'},{'id':2,'title':'Analysis','assigned':'2009-06-22T10:52:28.0687738-05:00','due':'2009-07-29T10:52:28.0687738-05:00','completed':'2009-07-14T10:52:28.0687738-05:00'},{'id':3,'title':'Narrative','assigned':'2009-06-22T10:52:28.0687738-05:00','due':'2009-07-29T10:52:28.0687738-05:00','completed':'2009-07-14T10:52:28.0687738-05:00'},{'id':4,'title':'Graphic','assigned':'2009-06-22T10:52:28.0687738-05:00','due':'2009-07-29T10:52:28.0687738-05:00','completed':'2009-07-14T10:52:28.0687738-05:00'}]}}

즉, "추가{id:'-1','result':{ /* ... snip ... */ }}"작동하는 JSON 주변의 래퍼.

어쨌든 JQGRID의 JSONREADER 속성을 JSON 결과를 구문 분석하기 위해 올바른 장소로 가리키는 것이 있습니까? 나는이 모든 것들과 시간을 보내고있다 :)

--- 편집하다 ---

나는 빠른 예를 게시하고 싶었습니다 ... 당신의 대답에 감사드립니다, Stuntz. 다음 예제에 필요한 것은 .NET입니다. 제이 록, jQuery, 그리고 JQGRID. 이것은 위의 JSON과 함께 작동합니다. 콘텐츠 유형을 설정 해야하는지 여부를 잊어 버립니다.

var lastsel; // last row selected (for editing)      

jQuery(document).ready(function(){ 
    jQuery("#mygrid").jqGrid({ 
        contentType: "text/plain; charset=utf-8",
        datatype: function(postdata)
        {
            $.ajax({
                url: 'http://localhost:2064/StoryManager/StoryManager.ashx/getPageItemRoles?id=3',
                data: postdata,
                complete: function(response, status)
                {
                    if(status=='success')
                    {
                        var mygrid = jQuery("#mygrid")[0];
                        var o = eval("(" + response.responseText + ")"); // TODO don't use eval.  it's insecure, but older browsers support it...
                        mygrid.addJSONData(o.result);
                    }
                }
            })
        },                
        colNames:['ID', 'Title', 'Assigned To', 'Assigned', 'Due', 'Completed'],
        colModel:[
            {name:'id', label:'ID', jsonmap:'id', hidden: true,  editrules: { edithidden: true }},
            {name:'title', jsonmap:'title', editable: true},
            {name:'assignedto', label:'Assigned To', jsonmap:'assignedto', editable: true},
            {name:'assigned', jsonmap:'assigned', editable: true},
            {name:'due', jsonmap:'due', editable: true},
            {name:'completed', jsonmap:'completed', editable: true}
        ],
        jsonReader: {
            repeatitems: false
        }
    });  
});
도움이 되었습니까?

해결책

아니요, JSONREADER를 통해이 작업을 수행 할 수 없습니다. 내부적으로 그리드는 다음과 같습니다.

        ts.p.page = data[ts.p.jsonReader.page];

... 점선 하위 프로파인에서는 작동하지 않습니다.

대신 데이터 유형을 함수로 설정하여 그리드 데이터를 수동으로 가져와야합니다. 그런 다음 데이터를 $ .ajax로 가져 와서 그리드와 마찬가지로 Grid.addjSondata를 호출 할 수 있습니다. 전체 응답을 전달하는 대신 응답의 하위 프로파인을 전달한다는 점을 제외하고는 그리드와 마찬가지로 다시 돌아올 수 있습니다.

다른 팁

이 게시물과 링크는 정말 도움이되었습니다. 나는 이것이 어떻게 작동하는지에 대한 명확한 이해가 없지만 누군가가 고통을 덜어주기 위해 이것을 게시 할 것이라고 생각했습니다. :)

이것이 GetRecords의 Return JSON입니다.

{ "id": -1, "result": { "page": "1", "total": "1", "레코드": "2", "행": [{ "id": "13" , "invdate": "2007-10-06", "이름": "클라이언트 3", "금액": "1000.00", "세금": "0.00", "총": "1000.00", "참고": ""}, { "id": "12", "invdate": "2007-10-06", "이름": "클라이언트 2", "금액": "700.00", "세금": "140.00", "총": "840.00", "참고": "세금 없음"}}}

그리고 이것은 작동 코드입니다.

jQuery(document).ready(function(){ 
    jQuery("#list4").jqGrid({ 
        contentType: "text/plain; charset=utf-8",
        datatype: function(postdata)
        {
            $.ajax({
                url: 'http://localhost/Booga/Baba.ashx/getRecords',
                data: "{}", // For empty input data use "{}",
                dataType: "json",
                type: "GET",
                contentType: "application/json; charset=utf-8",
                complete: function(response, status)
                {
                    if(status=='success')
                    {
                        var mygrid = jQuery("#list4")[0];
                        var o = eval("(" + response.responseText + ")");// TODO don't use eval.  it's insecure, but older browsers support it...
                        mygrid.addJSONData(o.result);
                    }
                }
            })
        },                
    colNames:['Inv No','Date', 'Client', 'Amount','Tax','Total','Notes'],
    colModel:[
        {name:'id',index:'id', width:55},
        {name:'invdate',index:'invdate', width:90, jsonmap:"invdate"},
        {name:'name',index:'name asc, invdate', width:100},
        {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}       
    ],
        jsonReader: {
            repeatitems: false
        }
    });  
});

그건 그렇고, 평가를 사용하는 이유가 안전하지 않은 이유를 아는 사람이 있습니까? 내 코드의 의견을보십시오. 포럼에서 그 부분을 가져 왔습니다 .ASP 링크.

즉, "{id : '-1', 'result': { / * ... snip ... * /}}"래퍼를 추가합니다.

이것은 Jayrock이 SMD 응답을 처리하는 방식의 부작용입니다 ... "ID"는 "응답 식별자"이며 비동기 통신을위한 도움이됩니다.

따라서 많은 비동기 요청을 해제하고 응답을 기다리지 않으면 "요청 ID"를 지정할 수 있으며 JayRock은이를 존중할 것입니다. 따라서 요청에 따라 응답을 정렬 할 수 있습니다.

나는 그것이 조금 이해하기를 바랍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top