Jevison7x
Jevison7x

Reputation: 737

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

I have a function that is called when a button is clicked, this function sends an ajax request using jquery. On success I have some logical if and else if statements. The web server can only send 2 types of text responses. It can either be "Success" or "Error". But when testing for these two conditions they seem to fail. I have added an else statement and an alert to tell me what the server is sending but just as I expected, it is either "Success" or "Error", the way I programmed my servlet in the server, it can only send "Success" or "Error" as response. Moreover my alert is spitting out "Success" or "Error" please I dont understand what is wrong here. please help.

 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'
    });
 }

Here is the servlet code that sends the response:

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");
    }
}

Upvotes: 0

Views: 1768

Answers (2)

Gyro Gearless
Gyro Gearless

Reputation: 5279

Your deleteProduct method sets content type "text/html", but you are sending plain text. This is likely to confuse jQuery, as it tries to guess the type of info based on the content type header sent. Either use "text/plain", or even better "application/json", so you may sent more info to the client.

Upvotes: 1

Niet the Dark Absol
Niet the Dark Absol

Reputation: 324620

Going to take a shot in the dark here, and say that the server is sending the response in UTF8 with a BOM, and this is causing your comparisons to fail.

To confirm, try alert(info.length). It should be 7 for "Success" or 5 for "Error". If it is not, then you probably have a BOM.

Another thing to check of course is that there is no whitespace in the response - again, the length check will help verify this.

You can fix this by encoding your server-side scripts as "UTF8 without BOM", sometimes referred to as "ANSI as UTF8" depending on your editor. Alternatively, change your if blocks to:

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

Upvotes: 2

Related Questions