June
June

Reputation: 59

Ajax return error on success calls

I have a simple form, do jquery form validation after submit, then Ajax call to form handler to send email, handler return string "success" or "error". Now when I run debugger, I saw Ajax post to the form handler, and sent out email successfully, but somehow Ajax displayed "status: error,error: Not Found"

Here's my code:

<script>
$(document).ready(function(){
    $("#myForm").submit(function(event) { 
        event.preventDefault();
            
        $('#myForm .required').each(function() {
            if($.trim($(this).val()) === '') {
                alert("Please fill the required field.");
                $(this).focus();
                return false;
            } 
        }); 
        
        $.ajax({
            type : "POST",
            url : "/mydomain/dispatcher/myFormHandler",
            data : $("#myForm").serialize(),
            dataType : "html",  
            success : function(data)  { console.log("Ajax call success");},
            error : function(request, status, error) { console.log ('status: ' + status+ ',error: ' + error);}
        });

        return false;
    });  
});
</script>
Inside form handler Java:
    ...
    @RequestMapping(value = "/myFormHandler")
    public String myFormHandler(HttpServletRequest request, HttpServletResponse response) {
       ...
       if (email sent)
         return "success"
       else
           return "error"
    }
<form id="myForm" method="post" action="/mydomain/dispatcher/myFormHandler">
<p>Name (required): <input type=text name="contactName" class="required" size=16 value="">
<p>Email (required): <input type=text name='contactEmail' class="required" size=16 value=""></p>
<p><input type="submit" name="submit" value="Send">
</form>

Upvotes: 0

Views: 1938

Answers (2)

shakib
shakib

Reputation: 5469

I am not a java expert, but seems the response from the servlet is sent incorrectly, It should be something like

public void myFormHandler(HttpServletRequest request, HttpServletResponse response) {
    JSONObject json = new JSONObject();
    if (email sent)
        json.put("success", true);
    else
        json.put("success", false);    
    response.setContentType("application/json");
    response.getWriter().write(json.toString());
}

EDIT

if html response is the intent, something simple like this should work

public void myFormHandler(HttpServletRequest request, HttpServletResponse response) {
    if (email sent)
        response.getWriter().write("success"); 
    else
        response.getWriter().write("error");     
}

hope this helps

Upvotes: 1

Abhinav
Abhinav

Reputation: 8168

May be you are including the relative path of the file in your AJAX request. May be the URL is imcomplete,Thats one of the reasons this error may come.

Since the AJAX request is initiating from the browser, its not relative to any file in the server.

NOTE:

If you are giving relative path like

somedir/filename in your `url` request make sure you do not prepend it with `'/'` like

/somedir/filename

EDIT: I am not sure what you mean by full url,but if you type the url in the browser, it should be able to give you the response

Upvotes: 0

Related Questions