簡體   English   中英

刪除錯誤后的jqGrid

[英]jqGrid after Delete error

這是我在jqGrid中使用的示例刪除選項。 它工作正常,並且我的服務器端腳本運行正常。 記錄被刪除,但是在收到服務器的響應后出現了一些問題。

// Del Options
{
    mtype: "POST",
    modal: true,
    url: "/internal/backupmanagement/backupmanager/deleteMySQLDB",
    reloadAfterSubmit: false,
    onclickSubmit: function () {
        var post = $("#grid_" + o.id).jqGrid("getGridParam", "postData");
        var server = post.serverID;
        $.openDialog("load", "Deleting old database entry.  Please wait...");
        var selrow = $("#grid_" + o.id).jqGrid("getGridParam", "selrow");
        var row = $("#grid_" + o.id).jqGrid("getRowData", selrow);
        console.log("about to return", row, server);
        return {
            id: row.recid,
            database: row.database,
            server: server
        };
    },
    afterSubmit: function (response, postdata) {
        response = eval("(" + response.responseText + ")");
        console.log(response);
        return [true, "success"];
    },
    afterComplete: function (response, postdata, formid) {
        response = eval("(" + response.responseText + ")");
        var selrow = $("#grid_" + o.id).jqGrid("getGridParam", "selrow");
        $("#grid_" + o.id).jqGrid("delRowData", selrow);
        if (response.error == 0) {
            $.openDialog("info", "Successfully deleted " + postdata.database + ".");
        } else {
            $.openDialog("info", "And error occured - " + response.msg + ".");
        }
    }
}

在網格中觸發afterComplete事件之前,我得到以下錯誤:

Uncaught TypeError: Object [object Array] has no method 'split'

因此,似乎在期待一個字符串時某些東西作為對象返回了。 我不確定服務器的響應格式是否正確,並且在文檔中也找不到任何預期的響應。

*更新*請求的服務器端代碼。 我剛剛包括了與jqGrid交互的控制器功能,其余的功能在應用程序中正在起作用並且正在發生。

function deleteMySQLDB()
{
  if (IS_AJAX) {
    if (($this->Application->deleteMySQLDBData(
        $_POST["id"],
        $_POST["database"],
        $_POST["server"]
    )) === false) {
      echo json_encode(
          array(
            "error" => 1,
            "msg"   => "Failed Deleting record from database: "
                       .$this->Application->error
          )
      );
      return false;
    }
    echo json_encode(
        array(
          "error" => 0,
          "msg"   => "success"
        )
    );
    return true;
  } else {
    header("Location: /");
  }
}

我希望這有助於了解我當前要返回的網格。

*更新*我所做的是更改了jqGrid插件中的源,以在執行拆分之前在值上包含toString()。

在jquery.jqGrid.min.4.3.1的第​​331行上:

var A = []; A = H.split(“,”);

變成 :

var A = []; A = H.toString()。split(“,”);

在宏偉的事物方案中,這似乎是無害的更改,並且避免了嘗試對數組進行拆分。 非常感謝您的幫助。 您肯定會在正確的地方指出我,奧列格(Oleg)!

由於您未包含服務器端代碼,因此我做出了一個很好的猜測。

在服務器上,您可以返回以下內容:

return Json(new { success = false, showMessage = true, message = "Error - You can't have a negative value", title = "Error" });

然后,您可以在客戶端上顯示一些消息(在此示例中,如果有錯誤)

afterComplete: function (response) {
                        var DialogVars = $.parseJSON(response.responseText); //parse the string that was returned in responseText into an object

                        if (!DialogVars.success || DialogVars.showMessage) {
                            showDialog($('#Dialog'), DialogVars.message, DialogVars.title);
                        }
                    } //afterComplete

讓我們假設所描述的錯誤的根源是afterComplete回調的代碼。 我認為您使用的方式有誤。 我不了解代碼的某些部分,該部分(測試response.error )應移至afterSubmit

如果您檢查 afterComplete回調的代碼 ,則主要問題將很清楚。 它將在setTimeout內部執行,延遲時間為0.5秒。 此時,可以加載(或可以加載)網格中的新數據。 因此,這將是錯誤的使用類似的方法delRowData和價值selrow現在可以被改變。

我會嚴格建議您不要使用eval函數。 代替線

response = eval("(" + response.responseText + ")");

正確使用

response = $.parseJSON(response.responseText);

如果您可以使用以下事實,可以改進onclickSubmit回調的代碼,即this回調內部的內容(如jqGrid的大多數其他回調)被初始化為網格的DOM元素。 因此,可以使用網格的selrow選項

var selrow = $(this).jqGrid("getGridParam", "selrow");

代替

var selrow = $("#grid_" + o.id).jqGrid("getGridParam", "selrow");

另一個事實是onclickSubmit將使用兩個參數調用onclickSubmit: optionspostdata 如果您使用的參數postdata為rowid,請不要使用multiselect: true 如果使用postdata multiselect: true ,則回調的postdata參數的值可以是將要刪除的行的rowid的逗號分隔列表。 因此,使用postdata最好使用selrow

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM