JQGrid -如何使用EditUrl

JQGrid - How to use EditUrl

本文关键字:EditUrl 何使用 JQGrid      更新时间:2023-09-26

我试图使用删除按钮从JQGrid中删除选定的项目。javascript代码如下

  <script type="text/javascript">
$(function(){ 
    $("#list").jqGrid({
        url:'<%=request.getContextPath()%>/MyGridServlet?action=fetchData',
        editurl:'<%=request.getContextPath()%>/MyGridServlet?action=deleteData',
        datatype: 'xml',
        mtype: 'POST',
        colNames:['Inv No','Date', 'Amount','Tax','Total','Notes'],
        colModel :[ 
            {name:'invid', index:'invid', width:55,editable:true, editrules:{required:true,number:true}}, 
            {name:'invdate', index:'invdate', width:90, editable:true, editrules:{required:true}}, 
            {name:'amount', index:'amount', width:80, align:'right',editable:true, editrules:{required:true,number:true}}, 
            {name:'tax', index:'tax', width:80, align:'right',editable:true, editrules:{required:true,number:true}}, 
            {name:'total', index:'total', width:80, align:'right',editable:true, editrules:{required:true,number:true}}, 
            {name:'note', index:'note', width:150, sortable:false,editable:true, editrules:{required:false}} 
        ],
        pager: '#pager',
        multiselect: true,
        loadonce: true,
        height: '100%',
        weight:'100%',
        rowNum:10,
        rowTotal: 2000,
        rowList:[10,20,30],
        sortname: 'invid',
        sortorder: 'desc',
        viewrecords: true,
        gridview: true,
        scrollable: false,
        caption: 'My first grid',
        ondblClickRow: function(rowid) {
            grid.jqGrid('editGridRow',rowid, editParam);
            return;
        }
    });                 
    jQuery("#list").jqGrid('navGrid','#pager',{add:false,del:false,edit:true});
    jQuery("#list").jqGrid('filterToolbar',{stringResult: true,searchOnEnter : false});
}); 
function deleteData(){
    alert("testing");
    var gr = jQuery("#list").jqGrid('getGridParam','selrow');
    if( gr != null ) jQuery("#list").jqGrid('delGridRow',gr,{reloadAfterSubmit:false});
    else alert("Please Select Row to delete!");
}

Servlet代码如下

    package com.test.servlets;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyGridServlet extends HttpServlet {
    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            if (request.getParameter("action").equals("deleteData")) {
                response.setContentType("text/xml;charset=UTF-8");
                String status = request.getParameter("status");
                String rows = request.getParameter("rows");
                String page = request.getParameter("page");
                int totalPages = 0;
                int totalCount = 15;
                if (totalCount > 0) {
                    if (totalCount % Integer.parseInt(rows) == 0) {
                        totalPages = totalCount / Integer.parseInt(rows);
                    } else {
                        totalPages = (totalCount / Integer.parseInt(rows)) + 1;
                    }
                } else {
                    totalPages = 0;
                }
                out.print("<?xml version='1.0' encoding='utf-8'?>'n");
                out.print("<rows>");
                out.print("<page>" + request.getParameter("page") + "</page>");
                out.print("<total>" + totalPages + "</total>");
                out.print("<records>" + 15 + "</records>");
                int srNo = 1;
                for (int i = 0; i < 5; i++) {
                    out.print("<row id='" + i + "'>");
                    out.print("<cell>" + request.getParameter("invid") + "</cell>");
                    out.print("<cell>Nov 15, 2011</cell>");
                    out.print("<cell>00$</cell>");
                    out.print("<cell>0$</cell>");
                    out.print("<cell>00$</cell>");
                    out.print("<cell>000</cell>");
                    out.print("</row>");
                }
                out.print("</rows>");
        } finally {
            out.close();
        }
    }
 }

现在当我运行这个,这工作直到删除提示,即当用户点击删除按钮,onclick deleteData()函数被调用,警报"测试"显示,删除确认框也弹出,当用户确认删除,我可以看到屏幕上的错误parsererror Status: 'parsererror'. Error code: 200

我想要实现的是,在按钮单击,servlet应该被调用,在servlet中,我想从db中删除数据,然后返回。我怎样才能做到这一点呢?另外,Servlet在响应中应该返回什么?

ajax响应看起来像从服务器(使用Chrome网络选项卡或Firebug查看它)?是否真的生成了一个请求?servlet不需要为editurl返回任何内容—响应实际上应该为空。jqGrid应该从你的"url"源重新加载数据来重建网格,在删除后。