使用AngularJS的发布请求失败,预检的响应在Slim Framework中具有无效的HTTP状态代码404

时间:2016-08-12 09:41:46

标签: angularjs slim

我正在使用slim api integration在角度js中开发登录表单。我在这个项目中使用了多个api,但只有当我尝试使用post请求登录时才显示错误。当我使用post请求向服务器发送登录请求时,它会在控制台上抛出错误,如。

Failed to load resource: the server responded with a status of 404 (Not Found)
XMLHttpRequest cannot load http://example.com/Youin-api/v1/business/login. Response for preflight has invalid HTTP status code 404

我的后端代码:

$app->post('/business/login', function() use($app) {
 $postvar = json_decode($app->request->getBody(), true);
verifyRequiredParams(array('emailid', 'pwd'));
$email = $postvar['emailid'];
$pwd = $postvar['pwd'];

// validating email address
validateEmail($email);

$db = new DbHandler();
$response = $db->loginBuser($email, $pwd);

// echo json response
echoRespnse(200, $response);
});

控制器:

public function loginBuser($email, $pwd) 
 {
        $response = array();
        $stmt = $this->conn->prepare("SELECT BID from business_login_tbl WHERE emailid = ? and login_pwd = ?";
        $stmt->bind_param("ss",$email,$pwd);
        $stmt->execute();
        $stmt->store_result();
        $num_rows = $stmt->num_rows;
        $stmt->close();
        if($num_rows > 0)
    {
            $response["code"] = "Success";
            $response["error"] = false;
            $response["user"] = $this->getBusinessuserByEmail($email);
        }
        else
        {
            $response["code"] = "failed";
            $response["error"] = true;
            $response["message"] = "Oops! Username of password Missmatch";
    }
    return $response;
}

我的回音功能:

function echoRespnse($status_code, $response) {
        $app = \Slim\Slim::getInstance();
        // Http response code
        $app->status($status_code);
        // setting response content type to json
        $app->contentType('application/json');
        echo json_encode($response);
    }

我也在使用cors:

$app = new \Slim\Slim();
$response = $app->response();
$response>header('Access-Control-Allow-Origin', 'http://example.com');
$response->header('Access-Control-Allow-Headers', 'Content-Type, X-Requested-With, X-authentication, X-client');
$response->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');

我不知道我的前端和后端代码有什么问题。谢谢提前..!

3 个答案:

答案 0 :(得分:1)

当您通过$http服务使用内容类型application/json和自定义标头(X-...)发出请求时,浏览器会执行预检请求以检查CORS标头。预检请求只是对指定端点的HTTP OPTIONS请求。如果您的API未实现OPTIONS处理,则可能会收到404错误,无法处理请求。

答案 1 :(得分:0)

您的API似乎没有您正在调用的端点,或者您的实现出现错误导致404(可能用户不存在)。你打电话给哪个网址?你的后端有这样的东西吗?

$app->post('<login-url>', function () {
    // Your logic here..
});

如果您提供更多信息,我们可以调查并尝试为您提供帮助。

答案 2 :(得分:0)

您遇到的问题是CORS。

跨源资源共享。

我最近发布了一些关于如何启用它的文档。

http://www.slimframework.com/docs/cookbook/enable-cors.html

如果您有任何疑问或遇到任何问题,请查看并告诉我。