即使响应http状态为200,也会执行Jquery ajax错误回调

时间:2017-07-25 06:35:59

标签: javascript jquery ajax

我已经编写了简单的ajax代码,在成功回调中我已经写了一个警告,但它不起作用。

代码是:

$(".change_forex_transaction_status").click(function(){
  $("#insufficient_funds").css("display","none");
  var id = $(this).attr('data-transaction_id');
  //var ttype = $(this).attr('data-ttype');
  if (confirm("Are you sure you want to mark this transaction as complete?")) {
    $(this).unbind("click");
    $.ajax({
      url:"<?php echo Yii::app()->getBaseUrl(true);?>/customer/changeForexTransactionStatus",
      type:"POST",
      dataType: "json",
      //data:{id:id,tidentify:2,ttype:ttype},
      data:{id:id,tidentify:2},
      success:function(res){
        if(res == "unauthorized"){
          alert("You Are not authorize to perform this action.");

        }else{
        if(res == "success"){
          location.reload();
        } else if(res == "insufficient_fund"){
          alert('Insufficient Fees');
          $("#insufficient_funds").css("display","block");
        } else if(res == 'invalid_fee_account'){
          alert('Invalid Merchant Fees Account');
        }
      }
      },
      error:function(t) {
        console.log(t);
      }
    });
  }
});

即使响应http状态代码为200,它也会进入错误回调,但它应该成功回调并打开一个警告框。

任何人都可以帮忙解决这个问题。

2 个答案:

答案 0 :(得分:3)

您期望json不是文本,因此将ajax dataType更改为text

 dataType: "text",

答案 1 :(得分:1)

使用JSON.stringify在服务器上发布数据,当您在json中将数据发布到服务器时,请使用内容类型"application/json"。现在,如果您希望服务器中的json中的数据,请使用dataType: "json"。如果来自服务器的数据是html,那么您可以使用dataType: "html"或文本,然后您可以使用dataType: "text"

data: JSON.stringify({ id: id, tidentify: 2 }),
contentType: "application/json",
dataType: "json"