使用JavaScript / Jquery / jqGrid在C#ASP.NET项目中工作。
新任务是有一个页面来i)接受一个Excel输入文件,ii)使用列ID来查找其他信息,以及iii)使用输入文件中的一些列和从中返回的所有列生成一个新的Excel文件数据库中。
我已经完成了,但只是想做更多的错误处理。在存储过程中,如果一切正常,它将返回一个数据表(或Oracle术语,CURSOR)。如果有错误,我添加了一个catch块并返回错误消息。
我修改了AJAX调用。除了将 dataType添加为'text'之外,我希望将返回为XML。
$.ajax({
// POST
// URL: url to call that stored procedure
dataType: text,
success: function (response) {
// now the response is XML (don't know why...
// specify dataType as 'text', but get XML...)
// If response contains 'string' tag, report error.
},
failure: ...
})
以下是我以前做的事情。我没有指定dataType,但不知何故有效。
$.ajax({
// POST
// ... rest is same but without the dataType
success: function (response) {
Download( response )
// The file is already and placed in Download directory.
// Call 'Download()' will actually make the download happen
// But here response is just a path to the Download directory +
// download file name.
下载()是:
function Download(url) {
document.getElementById('my_iframe').src = <%=ResolveUrl("~/")%> +url;
return false
};
如何让成功函数处理这两种类型的响应?
(仅供参考:前端页面是ASP.NET。按钮单击将调用JavaScript函数。该函数通过$ .ajax()调用Web服务函数。由于有很多行,Web服务函数多次调用数据库类中的函数 - 每次只传入一个ID。函数将返回调用存储过程。)
编辑:感谢Mustapha Larhrouch的解决方案。以下是我必须调整的一些要点:
这是我的代码:
$.ajax({
// POST
// URL
dataType: "text",
success: function (response) {
if (isXML(response)) {
var xmlDoc = $.parseXML(response);
$xml = $(xmlDoc);
var errMsg = $xml.find("string").text();
if (errMsg != "" ) {
// pop up a dialog box showing errMsg
}
}
else {
Download(response);
}
答案 0 :(得分:2)
你可以检查响应是否为xml,如果它正在解析它,如果不是响应是一个字符串。并且您可以使用此函数来检查响应是否为xml:
function isXML(xml){
try {
xmlDoc = $.parseXML(xml); //is valid XML
return true;
} catch (err) {
// was not XML
return false;
}
}
$.ajax({
// POST
// ... rest is same but without the dataType
success: function (response) {
if(isXML(response){
Download( response )
}
else{
//report as error
}