jqGrid重新加载不起作用 [英] jqGrid reload doesn't work

查看:163
本文介绍了jqGrid重新加载不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在使用trigger('reloadGrid')重新加载网格时遇到问题. 我向服务器发送一个AJAX调用,服务器返回xmlstring就好了.但网格不会加载新数据. 这是我的代码:

I am having a problem with reloading the grid with trigger('reloadGrid'). I send an AJAX call to the server and the server returns the xmlstring just fine. but the grid does not load the new data. heres my code:

$('#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文件:

here is my register.php file:

$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);

推荐答案

首先,您使用 $ .ajax 不知道dataType: 'xmlstring'.您的意思是dataType: 'xml'.

First of all you uses $.ajax which don't know the dataType: 'xmlstring'. You means dataType: 'xml'.

第二个您误解了datatype: 'xmlstring'.除了使用单独的$.ajax调用,您还可以使用

Second You misunderstood the datatype: 'xmlstring'. Instead of the usage of separate $.ajax call you can use

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

jqGrid的

选项.您可以考虑将postDatauID属性实现为方法(有关详细信息,请参见此处).可以将setInterval的主体简化为$("#tasks").trigger('reloadGrid', [{current: true}]);的调用(请参见此处

options of jqGrid. You can consider to implement uID property of the postData as method (see here for details). The body of setInterval can be reduced to the call of $("#tasks").trigger('reloadGrid', [{current: true}]); (see here and here).

如果您不需要先加载网格主体并且仅在setInterval内部进行加载,则可以设置datatype: 'local'并根据setGridParamdatatype更改为'xml',就像您已经做过的一样

If you need don't load the grid body at the first and do loading only inside of setInterval you can set datatype: 'local' and change datatype to 'xml' with respect of setGridParam like you do already.

此外,我自己也不使用PHP,但是我还是建议您使用DOMDocument ="nofollow noreferrer"> PHP DOM (例如,请参见此处 >或此处了解详情),而不是手动编写XML.直接构造XML文本会产生许多错误.例如,没有<之类的字符如果没有其编码就不能直接作为XML元素的内容放置.至少应使用 CDATA 部分.

Moreover I don't use PHP myself, but nevertheless I would recommend you to use DOMDocument from PHP DOM (see for example here or here for details) instead of writing the XML manually. Direct construction of XML text can produce many errors. For example you can't place characters like < directly as the content of XML elements without its encoding. At least CDATA sections should be used.

这篇关于jqGrid重新加载不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆