为什么jquery .fail没有收到故意触发错误的参数

时间:2018-06-02 00:42:12

标签: javascript php jquery

我试图在服务器上触发错误后使用自定义json编码数据 (在jquery ajax请求下故意抛出错误。)

我不明白出了什么问题,因为标题是正确的,数据到了。但似乎异常参数没有传递给javascript中的异常回调。

php代码

<?php

 if ( valid_input() )
 {
    ...      
 } 
 else // The validation goes wrong so, I have to return error
 {
   // Error code
   header('HTTP/1.1 500 Format does not match');
   header('Content-Type: application/json');    
   die(json_encode(array('message' => 'Bad format', 'code' =>1000)));
 }
?>

javascript代码

$("#uploadbutton").on('click',function(e)
{
    $.ajax({
        url:"http://www.oneurl.com/upload.php",
        async:true,
        type:'post',
        data:formdata
    })
    .done(render_data)
    .fail(upload_error);
});

//
function render_data(params) {...}

function upload_error(jqxhr,textstatus,ex)
{
 alert("Error:-> ", ex.message);   
}

来自服务器的响应

Status Code: 500 Format does not match
Content-Type: application/json
Response: {"message":"Bad Format","code":1000}

但警告未定义而是Bad Format。 有什么问题?¿

1 个答案:

答案 0 :(得分:1)

response存储为responseText参数的jqXHR属性。它以JSON字符串形式返回,因此您需要先JSON.parse才能直接访问属性。

function upload_error(jqxhr,textstatus,ex)
{
    var response = JSON.parse(jqxhr.responseText);
    alert("Error:-> ", response.message);   
}