weixin_41568184
叼花硬汉
2011-05-31 11:17
采纳率: 0%
浏览 250

返回200ok,但是触发错误事件而不是成功

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?

转载于:https://stackoverflow.com/questions/6186770/ajax-request-returns-200-ok-but-an-error-event-is-fired-instead-of-success

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

16条回答 默认 最新

  • csdnceshi52
    妄徒之命 2011-05-31 11:31
    已采纳

    jQuery.ajax attempts to convert the response body depending 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"}
    
    点赞 评论
  • csdnceshi66

    I reckon your aspx page doesn't return a JSON object. Your page should do something like this (page_load)

    var jSon = new JavaScriptSerializer();
    var OutPut = jSon.Serialize(<your object>);
    
    Response.Write(OutPut);
    

    Also, try to change your AjaxFailed:

    function AjaxFailed (XMLHttpRequest, textStatus) {
    
    }
    

    textStatus should give you the type of error you're getting.

    点赞 评论
  • csdnceshi78
    程序go 2011-05-31 11:39

    Try following

    $.ajax({
        type: 'POST',
        url: 'Jqueryoperation.aspx?Operation=DeleteRow',
        contentType: 'application/json; charset=utf-8',
        data: { "Operation" : "DeleteRow", 
                "TwitterId" : 1 },
        dataType: 'json',
        cache: false,
        success: AjaxSucceeded,
        error: AjaxFailed
    });
    

    OR

    $.ajax({
        type: 'POST',
        url: 'Jqueryoperation.aspx?Operation=DeleteRow&TwitterId=1',
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        cache: false,
        success: AjaxSucceeded,
        error: AjaxFailed
    });
    

    Use double quotes instead of single quotes in JSON object. I think this will solve the issue.

    点赞 评论
  • weixin_41568183
    零零乙 2011-06-15 14:47

    I've had some good luck with using multiple, space-separated dataTypes (jQuery 1.5+). As in:

    $.ajax({
        type: 'POST',
        url: 'Jqueryoperation.aspx?Operation=DeleteRow',
        contentType: 'application/json; charset=utf-8',
        data: json,
        dataType: 'text json',
        cache: false,
        success: AjaxSucceeded,
        error: AjaxFailed
    });
    
    点赞 评论
  • weixin_41568127
    ?yb? 2014-01-30 07:57

    Another thing that messed things up for me was using localhost instead of 127.0.0.1 or vice versa. Apparently, JavaScript can't handle requests from one to the other.

    点赞 评论
  • csdnceshi51
    旧行李 2014-11-29 23:56

    You just have to remove dataType: 'json' from your header if your implemented Web service method is void.

    In this case, the Ajax call don't expect to have a JSON return datatype.

    点赞 评论
  • csdnceshi54
    hurriedly% 2015-05-11 05:52

    Use the following code to ensure the response is in JSON format (PHP version)...

    header('Content-Type: application/json');
    echo json_encode($return_vars);
    exit;
    
    点赞 评论
  • csdnceshi77
    狐狸.fox 2015-06-25 14:53

    I had the same issue. My problem was my controller was returning a status code instead of JSON. Make sure that your controller returns something like:

    public JsonResult ActionName(){
       // Your code
       return Json(new { });
    }
    
    点赞 评论
  • csdnceshi60
    ℡Wang Yan 2015-06-29 08:35

    This is just for the record since I bumped into this post when looking for a solution to my problem which was similar to the OP's.

    In my case my jQuery Ajax request was prevented from succeeding due to same-origin policy in Chrome. All was resolved when I modified my server (Node.js) to do:

    response.writeHead(200,
              {
                "Content-Type": "application/json",
                "Access-Control-Allow-Origin": "http://localhost:8080"
            });
    

    It literally cost me an hour of banging my head against the wall. I am feeling stupid...

    点赞 评论
  • weixin_41568174
    from.. 2016-03-22 18:57

    I had the same problem. It was because my JSON response contains some special characters and the server file was not encoded with UTF-8, so the Ajax call considered that this was not a valid JSON response.

    点赞 评论
  • csdnceshi57
    perhaps? 2016-05-11 02:10

    I have faced this issue with an updated jQuery library. If the service method is not returning anything it means that the return type is void.

    Then in your Ajax call please mention dataType='text'.

    It will resolve the problem.

    点赞 评论
  • weixin_41568196
    撒拉嘿哟木头 2016-10-07 03:23

    You simply have to remove the dataType: "json" in your AJAX call

    $.ajax({
        type: 'POST',
        url: 'Jqueryoperation.aspx?Operation=DeleteRow',
        contentType: 'application/json; charset=utf-8',
        data: json,
        dataType: 'json', //**** REMOVE THIS LINE ****//
        cache: false,
        success: AjaxSucceeded,
        error: AjaxFailed
    });
    
    点赞 评论
  • weixin_41568127
    ?yb? 2018-04-21 03:10

    Your script demands a return in JSON data type.

    Try this:

    private string test() {
      JavaScriptSerializer js = new JavaScriptSerializer();
     return js.Serialize("hello world");
    }
    
    点赞 评论
  • weixin_41568174
    from.. 2018-05-01 07:40

    See this. Its also similar problem. Working i tried.

    Dont remove dataType: 'JSON',

    Note: echo only JSON Formate in PHP file if you use only php echo your ajax code return 200

    点赞 评论
  • weixin_41568196
    撒拉嘿哟木头 2018-06-09 00:49

    I have the similar problem but when I tried to remove the datatype:'json' I still have the problem. My error is executing instead of the Success

    function cmd(){
        var data = JSON.stringify(display1());
        $.ajax({
            type: 'POST',
            url: '/cmd',
            contentType:'application/json; charset=utf-8',
            //dataType:"json",
            data: data,
            success: function(res){
                      console.log('Success in running run_id ajax')
                      //$.ajax({
                       //   type: "GET",
                       //   url: "/runid",
                       //   contentType:"application/json; charset=utf-8",
                       //   dataType:"json",
                       //   data: data,
                       //  success:function display_runid(){}
                      // });
            },
            error: function(req, err){ console.log('my message: ' + err); }
        });
    }
    
    点赞 评论
  • csdnceshi76
    斗士狗 2018-10-15 09:48

    If you always return JSON from the server (no empty responses), dataType: 'json' should work and contentType is not needed. However make sure the JSON output...

    jQuery AJAX will throw a 'parseerror' on valid but unserialized JSON!

    点赞 评论

相关推荐