2016-01-31 2 views
0

Я делаю вызов ajax для удаления записи SQL. Если запись найдена и удалена, я возвращаю код HTTP 200 с сообщением, что запись была удалена. Поэтому он переходит в раздел .done и печатает мое сообщение вместе с DONE. В случае, запись не найдена, я хочу перейти в раздел .fail, поэтому я возвращаю HTTP-код 400 с моим сообщением, что запись не была найдена. Он печатает ОШИБКА, но сообщение всегда пустое. Если я проверяю возвращение вызова Ajax в консоли хрома я вижу мое сообщение с кодом 400.Пустой отклик на ошибку в ajax .post call

$.post('ajax/project.php', data) 
    .fail(function(res) { 
     $("#info").html("ERROR"); 
    }) 

    .done(function(res) { 
     $("#info").html("DONE"); 
    }) 

    .always(function(res) { 
     $("#debug").html(res); 
    }); 

Любым решением бросить ошибку, чтобы перейти в .fail но с получением моего сообщения об ошибке ? Я через ошибки, как это:

function myError($msg, $code=200, $die=true) { 
    http_response_code($code); 
    echo $msg; 
    if($die) 
     die(); 
} 

Мой вызов myError выглядит следующим образом:

if(!$stmt->affected_rows) 
    myError('Project #'.$pid.' not found', 400); 

Edit2: Как вы можете видеть на скриншоте ниже, с кодом 200 HTTP это просто возвращает мое сообщение, в HTTP-код 400 он возвращает мое сообщение в объекте. Похоже, мне нужно сделать обходной путь, чтобы поймать как возможные возвращения, но я не совсем понимаю, почему он действует иначе.

screenshot of the console of chrome

Edit1: Только что узнал, если я предупредит результат с оповещения (Рез); в .всегда раздел Я получаю [object Object] в случае ошибки вместо моего сообщения.

+0

откуда вы звоните функцию myError – brk

+0

@ user2181397 'если (! $ Stmt-> affected_rows) myError ('Project #'. $ Pid. 'Not found', 400); ' – SoS

ответ

0

Как вы можете видеть на скриншоте консоли хрома, ответы сервера различны в случае успеха (200) и ошибки (400/500), но я не знаю, почему ..

Screenshot of console

Однако, это грязный хак, но он работает пока.

$.post('ajax/project.php', data) 
    .fail(function(res) { 
     $("#info").html("ERROR"); 
    }) 

    .done(function(res) { 
     $("#info").html("DONE"); 
    }) 

    .always(function(res) { 
     console.log(res); 
     if(res instanceof Object) 
      $("#debug").html(res.responseText); 
     else 
      $("#debug").html(res); 
    }); 

Если кто-нибудь может дать мне лучший пример того, как решить эту проблему, я был бы счастлив :)

Смежные вопросы