2012-01-26 4 views
0

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

$('#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!'; 
} 

UPDATE:

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

ответ

0

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

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

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

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

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

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

+0

wow ok благодарит много за всю информацию, но после выполнения большинства из них (кроме php для XML) ... Я все еще придерживаюсь исходной проблемы, сетка не обновляет каждые х секунд новые записи. Я отправлю код, если вам это нужно. – stackErr

+0

@ user1160022: Добро пожаловать! Чтобы помочь вам локализовать проблему, мне нужно, конечно, использовать текущий код, который вы используете. Более того, если бы было важно знать, где вы определяете (или присваиваете) 'uID'. Если было бы хорошо, если бы вы опубликовали ответ XML, который будет создан сервером. – Oleg

+0

Извините за поздний ответ, у меня не было интернет-соединения в течение нескольких дней. Я обновил свой первоначальный вопрос, посмотрю и дайте мне знать, где я ошибаюсь. Благодаря! Я также добавил некоторые дополнительные функции в сетку. – stackErr