Ajax可以成功()处理两种类型的返回吗?

时间:2017-07-24 15:31:45

标签: javascript c# jquery asp.net ajax

使用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的解决方案。以下是我必须调整的一些要点:

  1. 添加dataType。
  2. 如果响应是XML,请检查是否有错误。
  3. 如果不是XML,只需下载。
  4. 这是我的代码:

    $.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);
            }
    

1 个答案:

答案 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
        }