调用代码后面的方法使用jquery的void返回类型

时间:2014-01-29 18:48:16

标签: c# javascript jquery asp.net json

您好我正在尝试使用jquery调用方法后面的代码。但该方法不应返回任何值。我创建了Web方法并调用它。我的方法是这样的

$.ajax({
                type: "post",
                contentType: "application/json;charset=utf-8",
                dataType: "json",
                url: "Model/Services/Information.asmx/TestingExport",
                data: JSON.stringify(empno),
                success: function (resp) {
                    if (resp.ok) {
                        $('#ExportEmpInfo').empty();
                        $('#ExportEmpInfo').append('<p><b>' + 'Data Has been Exported to Excel successfully ' + '</b></p>');
                    }
                else {

                    $('#ExportEmpInfo').empty();
                    $('#ExportEmpInfo').append('<p><b>' + 'Exporting to Excel Failed' + '</b></p>');

                }


            },
            error: function (jqXHR, textStatus, errorThrown) {
                alert('TextStatus:' + textStatus + ' errorThrown: ' + errorThrown);
            }
        })

但是,测试导出方法将调用其他方法,这些方法最终会调用一个将数据导出为ex​​cel格式的方法。在最终方法中,有一部分代码用于将数据导出到excel

response.Clear();
            response.ClearContent();
            response.Charset = "";
            response.ContentType = "application/vnd.ms-excel";

我猜这与Json中提到的reponse.ContentType冲突并抛出“ParseError Object Error”。这是投掷错误。请帮我如何调用一个不返回任何值的函数。如果需要返回类型,那么我可以返回任何值但是如何处理response.ContentType

引发的错误

我的导出到Excel功能

public static void ExportToExcel(HttpResponse response, DataSet ds)
        {
            try
            {
                response.Clear();
                response.ClearContent();
                response.Charset = "";
                response.ContentType = "application/vnd.ms-excel";

                DataGrid dg = new DataGrid();

                for (int i = 0; i < ds.Tables.Count; i++)
                {

                    StringWriter stringWriter = new StringWriter();

                    HtmlTextWriter htmlWriter = new System.Web.UI.HtmlTextWriter(stringWriter);

                    stringWriter = new System.IO.StringWriter();
                    htmlWriter = new System.Web.UI.HtmlTextWriter(stringWriter);
                    dg.DataSource = ds.Tables[i];
                    dg.DataBind();
                    dg.RenderControl(htmlWriter);
                    response.Write(stringWriter.ToString());
                }
                response.Flush();
                response.Close();
                response.Write("");

            }

控件正在浏览所有这些代码而没有任何错误,但是它没有生成excel表,因为它是通过正常的代码隐藏方法调用而不是从web方法调用时生成的。

2 个答案:

答案 0 :(得分:2)

如果没有预期的响应,正确的解决方案应该是删除设置响应的代码。但是,如果这是不可能的(我假设这里没有使用“最终类”),那么这一行

dataType: "json"

告诉jQuery它应该期望JSON格式的响应。然而,它收到的东西不同,无法解析它,抛出错误。只需删除此行。

答案 1 :(得分:0)

我认为TestingExport方法的返回类型为void。然后不需要保持成功:function(resp){if(resp.ok)....你可以删除resp作为参数并检查它是否也是。如果你想保留它,而不是检查resp.ok,请检查!(resp === null)。