Перезагрузка jqGrid не работает - PullRequest
0 голосов
/ 26 января 2012

У меня проблема с перезагрузкой сетки с помощью триггера ('reloadGrid').Я отправляю AJAX-вызов на сервер, и сервер просто возвращает строку xmlstring.но сетка не загружает новые данные.вот мой код:

$('#tasks').jqGrid({
        datatype: "xmlstring",
        datastr: <?php echo json_encode($_xml); ?>,
        colNames: ["Date","TaskID","Subject","Notes","Due Date"],
        colModel: [ 
            {name: "Date", index:"AssignDate",align: "center", xmlmap:"AssignDate"},
            {name: "TaskID", index:"TaskID",xmlmap:"TaskID", align:"center"},
            {name: "Subject", index:"TaskSubject", align: "center", xmlmap:"TaskSubject"},
            {name:"Notes", index:"Notes", align: "center",height: 20,xmlmap:"Notes"},
            {name:"Due Date", index:"DueDate", align: "center",height: 20,xmlmap:"DueDate"}
        ],
        height: 250,
        viewRecords: true,
        autowidth: true,
        xmlReader: {
            root: "tasks",
            row: "task",
            repeatitems: false
        },
        pager: $('#navTasks'),
        caption: "Your Tasks"});
setInterval(
    function(){
    $.ajax({
        url: 'register.php',
        data: {uID:uID},
        dataType: 'xmlstring',
        success: function(xml)
        {
            $("#tasks").setGridParam({datastr: xml, datatype: "xmlstring"}).trigger('reloadGrid')
        }
    });},10000);

вот мой файл register.php:

$uID = $_GET['uID'];
$host="127.0.0.1:3306";
$db_name='wf_db';
$tbl_name="tasks";
$connect = new mysqli("$host","root"," ","$db_name")or die('Can\'t connect to database!');
$sql = "SELECT * FROM $tbl_name WHERE UserID='$uID' and Task_Completed='0'";
$query_data = mysqli_query($connect,$sql)or die('Couldnt get data');
$row = mysqli_num_rows($query_data);
if($row != 0){ 
    $_xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\r\n";
    $_xml .="<tasks>\r\n";
    while ($result = mysqli_fetch_array($query_data)) {
         if ($result["TaskID"]) {
            $_xml .="\t<task>\r\n";
            $_xml .="\t\t<TaskID>" . $result["TaskID"] . "</TaskID>\r\n";
            $_xml .="\t\t<UserID>" . $result["UserID"] . "</UserID>\r\n";
            $_xml .="\t\t<AssignID>" . $result["AssignID"] . "</AssignID>\r\n";
            $_xml .="\t\t<AssignDate>" . $result["Assign_Date"] . "</AssignDate>\r\n";
            $_xml .="\t\t<DueDate>" . $result["Due_Date"] . "</DueDate>\r\n";
            $_xml .="\t\t<AssignUser>" . $result["Assign_User"] . "</AssignUser>\r\n";
            $_xml .="\t\t<TaskSubject>" . $result["Task_Subject"] . "</TaskSubject>\r\n";
            $_xml .="\t\t<Notes>" . $result["Notes"] . "</Notes>\r\n";
            $_xml .="\t\t<TrackID>" . $result["TrackID"] . "</TrackID>\r\n";
            $_xml .="\t\t<Details>" . $result["Completion_Details"] . "</Details>\r\n";
            $_xml .="\t</task>\r\n";
         } else {
            $_xml .="\t<task>\r\n";
            $_xml .="\t\t<TaskID></TaskID>\r\n";
            $_xml .="\t\t<UserID></UserID>\r\n";
            $_xml .="\t\t<AssignID></AssignID>\r\n";
            $_xml .="\t\t<AssignDate></AssignDate>\r\n";
            $_xml .="\t\t<DueDate></DueDate>\r\n";
            $_xml .="\t\t<AssignUser></AssignUser>\r\n";
            $_xml .="\t\t<TaskSubject></TaskSubject>\r\n";
            $_xml .="\t\t<Notes></Notes>\r\n";
            $_xml .="\t\t<TrackID></TrackID>\r\n";
            $_xml .="\t\t<Details></Details>\r\n";
            $_xml .="\t</task>\r\n";
         }
    }

 $_xml .="</tasks>";

echo json_encode($_xml);

 } 
 else {
    echo 'Oops something went wrong!';
}

ОБНОВЛЕНИЕ:

    var data = <?php echo json_encode($_xml); ?>;
    var uID = <?php echo $uID; ?>;$grid.jqGrid({
        datatype: "xmlstring",
        datastr: data, url: 'register.php',
        sortname: 'Job ID',
        sortOrder: 'asc',
        postData: {uID:uID},
        colNames: ["track","Job ID","Subject","Notes","Details","Due Date"],
        colModel: [ 
            {name: "track",  index:"TrackID",align: "center", xmlmap:"TrackID", hidden: true, sortable: true},
            {name: "Job ID", index:"TaskID",xmlmap:"TaskID", align:"center",sortable: true, sorttype: 'text', sortable: true, editable: false, editoptions: {readonly: true}},
            {name: "Subject", index:"TaskSubject", align: "center", xmlmap:"TaskSubject",sorttype: 'text', sortable: true,editable: false, editoptions: {readonly: true}},
            {name:"Notes", index:"Notes", align: "center",height: 20,xmlmap:"Notes",sorttype: 'text', sortable: true,editable: false, editoptions: {readonly: true}},
            {name:"Details", index:"Details", align: "center", xmlmap:"Details", editable: true, edittype: 'select', editoptions: {value: 'Not Started:Not Started;In Progress:In Progress;Completed:Completed'}, sortable: true},
            {name:"Due Date", index:"DueDate", align: "center", xmlmap:"DueDate",sorttype: 'text', sortable: true, editable: true, editoptions: {dataInit: initDateEdit}, formatter: 'date', formatoptions: {newformat: 'd-M-Y'}, datefmt: 'd-M-Y'}
        ],


        editurl: 'editRow.php',
        rowNum: 10,
        rowList: [10,20,50],
        viewRecords: true,
        xmlReader: {
            root: "tasks",
            row: "task",
            repeatitems: false
        },
        pager: $('#navTasks'),
        caption: "Your Tasks"
    }).navGrid('#navTasks',{<?php
        if ($user==NULL){
            echo 'edit:false,add:false,del:false';
        }
        else{
            echo 'edit:false,add:false,del:false';
        }
    ?>},{},{},{},{multipleSearch: false, multipleGroup: false});


    setInterval(
    function(){
    $grid.trigger('reloadGrid',[{current:true}]);},6000);

1 Ответ

0 голосов
/ 26 января 2012

Прежде всего вы используете $. Ajax , который не знает dataType: 'xmlstring'.Вы означает dataType: 'xml'.

Секунда. Вы неправильно поняли datatype: 'xmlstring'.Вместо использования отдельного вызова $.ajax вы можете использовать

datatype: 'xml',
url: 'register.php',
postData: {uID: uID},

опции jqGrid.Можно рассмотреть возможность реализации свойства uID postData как метода (подробности см. здесь ).Тело setInterval может быть уменьшено до вызова $("#tasks").trigger('reloadGrid', [{current: true}]); (см. здесь и здесь ).

Если вам не нужно загружать сеткутело в начале и делать загрузку только внутри setInterval, вы можете установить datatype: 'local' и изменить datatype на 'xml' относительно setGridParam, как вы уже делаете.

Более того, я несам использую PHP, но тем не менее я бы порекомендовал вам использовать DOMDocument из PHP DOM (см., например, здесь или здесь ) вместо записиXML вручную.Прямое построение XML-текста может привести к множеству ошибок.Например, вы не можете размещать символы, такие как <, непосредственно как содержимое элементов XML без их кодирования.Следует использовать как минимум CDATA разделов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...