Ajax request returns 200 OK, but an error event is fired instead of success
ajax, asp.net, javascript, jquery, json
Solution
`jQuery.ajax` attempts to convert the response body based on the specified `dataType` parameter or the `Content-Type` header sent by the server. If the conversion fails (e.g. if the JSON/XML is invalid), the error callback is fired.
Your AJAX code contains:
dataType: "json"
In this case jQuery:
Evaluates the response as JSON and returns a JavaScript object. […] The JSON data is parsed in a strict manner; any malformed JSON is rejected and a parse error is thrown. […] an empty response is also rejected; the server should return a response of null or {} instead.
Your server-side code returns HTML snippet with `200 OK` status. jQuery was expecting valid JSON and therefore fires the error callback complaining about `parseerror`.
The solution is to remove the `dataType` parameter from your jQuery code and make the server-side code return:
Content-Type: application/javascript
alert("Record Deleted");
But I would rather suggest returning a JSON response and display the message inside the success callback:
Content-Type: application/json
{"message": "Record deleted"}
Problem
I have implemented an Ajax request on my website, and I am calling the endpoint from a webpage. It always returns 200 OK, but jQuery executes the error event. I tried a lot of things, but I could not figure out the problem. I am adding my code below: jQuery Code ``` var row = "1"; var json = "{'TwitterId':'" + row + "'}"; $.ajax({ type: 'POST', url: 'Jqueryoperation.aspx?Operation=DeleteRow', contentType: 'application/json; charset=utf-8', data: json, dataType: 'json', cache: false, success: AjaxSucceeded, error: AjaxFailed }); function AjaxSucceeded(result) { alert("hello"); alert(result.d); } function AjaxFailed(result) { alert("hello1"); alert(result.status + ' ' + result.statusText); } ``` C# code for `JqueryOpeartion.aspx` ``` protected void Page_Load(object sender, EventArgs e) { test(); } private void test() { Response.Write("<script language='javascript'>alert('Record Deleted');</script>"); } ``` I need the `("Record deleted")` string after successful deletion. I am able to delete the content, but I am not getting this message. Is this correct or am I doing anything wrong? What is the correct way to solve this issue?