我需要$ http POST状态码400,但得到200

时间:2016-09-04 01:32:35

标签: javascript angularjs

我有这段代码

var body="ok";
var suc=0; var failed=0;
$http({
           url: API.toUrl('api/xxxx/xxxx'),
                method: 'POST',
                data: body
            }).then(function(response) {
                if(response.status==200){
                    suc=suc+1;
                }
                if(response.status==400){
                    failed=failed+1;
                }                        
            });

我的问题是我无法获得400状态代码,我只获得200但不是400.如何在response参数中获得400状态代码。

我在Angular工作,有什么想法获得400?

由于

4 个答案:

答案 0 :(得分:0)

400状态代码将显示为错误,then接受两个函数作为参数,第一个用于OK响应,第二个用于错误,因此您必须在错误函数上捕获400

所以如果你想抓住它,你应该这样做:

  var body = "ok";
  var suc = 0;
  var failed = 0;
  $http({
      url: API.toUrl('api/xxxx/xxxx'),
      method: 'POST',
      data: body
  }).then(
      function(response) {
         if (response.status == 200) {
          suc = suc + 1;
         }
      }, 
      function(error) {
          //Catch 400 here
      }
  );

答案 1 :(得分:0)

如果您使用PHP服务器编写api / s / services,请使用以下行手动将400发送到您的$http请求

<?php

// Get the current response code and set a new one
var_dump(http_response_code(400));

// Get the new response code
var_dump(http_response_code());
?>

<强> [UPDATE] 您可以在此处查看更多示例以查看如何发送响应代码: PHP: How to send HTTP response code?

答案 2 :(得分:0)

您需要使用其他函数进行错误(400):

var body="ok";
var suc=0; var failed=0;
$http({
           url: API.toUrl('api/xxxx/xxxx'),
                method: 'POST',
                data: body
            }).then(function(response) {
                alert response.status ;
              },function error(response) {
                alert response.status ;
            });

答案 3 :(得分:0)

来自文档:

  

200到299之间的响应状态代码被视为成功状态,并将导致调用成功回调。任何超出该范围的响应状态代码都被视为错误状态,并将导致调用错误回调。

- AngularJS $http Service API Reference

var body="ok";
var suc=0; var failed=0;
$http.post(url, data).then(function onSuccess(response) {
    if(response.status==200){
        suc=suc+1;
    };
    //return to chain response
    return response;
}).catch(function onReject(errorResponse) {
    if(errorResponse.status==400){
        failed=failed+1;
    }
    //throw to chain rejection
    throw errorResponse;                        
});

如果从httpPromise链接,请务必在throw处理程序中使用onReject语句,以避免转换拒绝成功。