【问题标题】:Abort Ajax call and show else block in JSP as explained按照说明中止 Ajax 调用并在 JSP 中显示 else 块
【发布时间】:2018-01-08 03:13:00
【问题描述】:

我不熟悉编码和快速学习。我这里有一个情况,我需要这里专家的一些建议。

所以我有一个类似的jsp:

if(something){
    //render content from js file here through ajax call
}else{
    //java code here
}

在一个单独的 js 文件中,如果满足 if 条件,我正在执行 ajax 调用并呈现内容。否则我需要显示 else 块。在 ajax 调用中,在某些情况下我会得到一个错误(例如:在 JSON 中解析的文件在服务器中不可用,这将在错误中返回)。所以我需要在jsp文件中显示else块。

JS:

 $.ajax({
    type: "GET",
    url: url1.trim(),
    dataType: "json",
    success: function(data) {
     // render content in if block with some HTML
    },
    error: function(xhr,status) {
      //abort the ajax call here and show the else block in jsp code
    }
   });

请任何人提供如何解决这种情况。我还处于学习阶段。我在这里唯一能想到的就是中止ajax调用并转到jsp中的else块。有没有更好的方法来解决这个问题?如果不是,我们怎么能在jsp中去else块。非常感谢任何帮助或建议。

提前致谢。请让我知道是否需要详细说明这个问题。我会尝试解释它缺少什么?

【问题讨论】:

    标签: javascript java jquery ajax jsp


    【解决方案1】:

    您可以将 JSTL EL 用于您的 jsp 文件。

    <c:choose>
      <c:when test="${condition1}">
      <script>...</script> //js script to execute
      </c:when>
      <c:otherwise>
        //java code here
      </c:otherwise>
    </c:choose>

    【讨论】:

    • 嗨@aholake。非常感谢您的回复。但是您的回答只是使用 jstl 替代 if else 块。但它没有显示如何中止ajax调用并返回显示jsp的else back。如果问题不清楚,请编辑您的答案或让我知道。我会尽力解释得更好。
    • 你不能把它们混在一起,因为java条件是在服务器端执行的,而脚本是在客户端执行的。有一种解决方法是在收到 ajax 调用的结果后,将此结果传递给服务器,然后重新加载一次页面。
    【解决方案2】:

    如何在隐藏的 div 中显示“其他”内容。然后,当条件为 false 或 ajax 调用返回错误时,您将显示该 div。

    <script>
        $(function() {
            <c:choose>
                <c:when test="${something}">
                    $('#waitDiv').show();
                    $.ajax({
                        type: "GET",
                        url: url1.trim(),
                        dataType: "json",
                        success: function(data) {
                            $('#contentDiv').html(data).show();
                        },
                        error: function(xhr, status) {
                            $('#contentDiv').show();
                        },
                        complete: function() {
                            $('#waitDiv').hide();
                        }
                    });
                </c:when>
                <c:otherwise>
                    $('#contentDiv').show();
                </c:otherwise>
            </c:choose>
        });
    </script>
    
    <div id="waitDiv" style="display: none;">
    Please wait.
    </div>
    
    <div id="contentDiv" style="display: none;">
    This is the content to display when the condition is false
    or the ajax call fails. This content will get replaced if
    the ajax call succeeds.
    </div>
    

    最初contentDiv 是隐藏的,但如果条件为假,它将在页面就绪处理程序执行后立即显示。

    如果条件为真,则显示waitDiv 并进行ajax 调用。如果ajax调用成功,返回的内容放在contentDiv中,并显示contentDiv。如果 ajax 调用失败,contentDiv 会显示“else”内容。在任何一种情况下,waitDiv 都是隐藏的。

    注意:当 ajax 调用返回错误时,您不会中止它。 ajax 调用完成,只是没有成功。

    【讨论】:

    • 嗨@JohnS。感谢您的回复。我也有同样的想法。但是我在 if 和 else 条件下有相同的 div,所以不能使用 hide 属性:(
    • @StackAcc - 我已经更新了我的答案,以展示如何让 ajax 调用使用与 else 条件相同的 div。
    • 对不起。我有相同的 div 和相同的 id,因为我们将只显示一个部分。所以不能使用隐藏和显示:(请有其他选择吗?
    • @StackAcc - 我认为您可能没有遵循我的答案中的代码,所以我添加了答案。它并不是真正的隐藏/显示。在所有情况下都显示相同的 div。如果进行了 ajax 调用,它的显示就会被延迟。此外,如果 ajax 调用成功,它会得到不同的内容。
    猜你喜欢
    • 2018-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    • 2019-09-11
    • 2012-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多