您好我正在尝试使用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);
}
})
但是,测试导出方法将调用其他方法,这些方法最终会调用一个将数据导出为excel格式的方法。在最终方法中,有一部分代码用于将数据导出到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方法调用时生成的。
答案 0 :(得分:2)
如果没有预期的响应,正确的解决方案应该是删除设置响应的代码。但是,如果这是不可能的(我假设这里没有使用“最终类”),那么这一行
dataType: "json"
告诉jQuery它应该期望JSON格式的响应。然而,它收到的东西不同,无法解析它,抛出错误。只需删除此行。
答案 1 :(得分:0)
我认为TestingExport方法的返回类型为void。然后不需要保持成功:function(resp){if(resp.ok)....你可以删除resp作为参数并检查它是否也是。如果你想保留它,而不是检查resp.ok,请检查!(resp === null)。