if 和 else-if 语句拒绝在 jQuery 的 AJAX 函数中工作

if and else-if statements refuses to work in jquery's ajax function

本文关键字:AJAX 函数 工作 jQuery else-if 语句 拒绝 if      更新时间:2023-09-26

我有一个在单击按钮时调用的函数,该函数使用 jquery 发送 ajax 请求。关于成功,我有一些合乎逻辑的if和else if语句。Web 服务器只能发送 2 种类型的文本响应。它可以是"成功"或"错误"。但是在测试这两个条件时,它们似乎失败了。我添加了一个 else 语句和一个警报来告诉我服务器正在发送什么,但正如我预期的那样,它要么是"成功"要么是"错误",这是我在服务器中编程 servlet 的方式,它只能发送"成功"或"错误"作为响应。此外,我的警报正在吐出"成功"或"错误",我不明白这里出了什么问题。请帮忙。

 function deleteRecord(productID, description)
 {
    var errorMessage = '<td class="red-left">There was an error. <a href="">Please try again.</a></td>';
    var successMessage = '<td class="green-left">Product '+productID+' ('+description+') has been deleted sucessfully.</td>';
    var data = "productID="+productID+"&description="+description+"&deleteProduct=true";
    $.ajax({
        type: "GET",
        url: "deleteInventoryRecord.mpcs",
        data: data,
        cache: false,
        success: function(info)
        {
            if(info == 'Success')//This does not work
            {
                $(".green-left").replaceWith(successMessage);
                $("#message-green").fadeIn("slow");
                $("#product-"+productID).remove();
            }
            else if(info == 'Error')//This does not work
            {
                $(".red-left").replaceWith(errorMessage);
                $("#message-red").fadeIn("slow");
            } 
            else//This works always but I dont need it
            {
                alert(info); //It always says "Success" or "Error"
            }
        },
        dataType: 'text'
    });
 }

下面是发送响应的 servlet 代码:

private void deleteProduct(HttpServletResponse response, String productID) throws IOException
{
    try
    {
        response.setContentType("text/html");
        InventoryDAO iDao = new InventoryDAO();
        if(iDao.deleteProduct(productID) == true)
            response.getWriter().println("Success");
        else
            throw new RuntimeException("Error");
    }
    catch(ClassNotFoundException | IOException | SQLException | RuntimeException xcp)
    {
        response.getWriter().println("Error");
    }
}
在这里在

黑暗中拍摄,并说服务器正在使用 BOM 以 UTF8 发送响应,这会导致您的比较失败。

要确认,请尝试alert(info.length) 。"成功"应为 7,"错误"应为 5。如果不是,则您可能有一个 BOM。

当然,要检查的另一件事是响应中没有空格 - 同样,length检查将有助于验证这一点。

您可以通过将服务器端脚本编码为"不带 BOM 的 UTF8"(有时称为"作为 UTF8 的 ANSI",具体取决于您的编辑器)来解决此问题。或者,将if块更改为:

if( info.match(/Success$/)) ...
else if( info.match(/Error$/)) ...

您的deleteProduct方法设置内容类型"text/html",但您正在发送纯文本。这可能会混淆jQuery,因为它试图根据发送的内容类型标头来猜测info的类型。使用"text/plain",甚至更好的"application/json",这样您就可以向客户端发送更多信息。