我有一个单击按钮时调用的函数,该函数使用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");
}
}
答案 0 :(得分:2)
要在黑暗中拍摄,并说服务器正在使用BOM以UTF8发送响应,这导致您的比较失败。
要确认,请尝试alert(info.length)
。 “成功”应为7,“错误”应为5。如果不是,那么您可能有BOM。
要检查的另一件事当然是响应中没有空格 - 再次,length
检查将有助于验证这一点。
您可以通过将服务器端脚本编码为“无BOM的UTF8”来修复此问题,有时也称为“ANSI as UTF8”,具体取决于您的编辑器。或者,将if
块更改为:
if( info.match(/Success$/)) ...
else if( info.match(/Error$/)) ...
答案 1 :(得分:1)
您的deleteProduct
方法设置内容类型“text / html”,但您要发送纯文本。这可能会混淆jQuery,因为它试图根据发送的内容类型标头猜测info
的类型。使用“text / plain”,甚至更好的“application / json”,这样你就可以向客户发送更多信息。