php 如何接收XHR请求的201响应码?

8tntrjer  于 2022-12-28  发布在  PHP
关注(0)|答案(1)|浏览(187)

我有这个:
途径:

Route::post('/send', 'MessagerieController@ajoutMessage')->name('send');
xmlhttp.open("post", "/send",  true)
        xmlhttp.setRequestHeader("X-CSRF-TOKEN", CSRF_TOKEN);
        
        xmlhttp.send(donneesJson)

和php控制器:

if($_SERVER['REQUEST_METHOD'] == 'post'){
            $donneesJson = file_get_contents('php//input');
            $donnees = json_decode($donneesJson);

            DB::table('messages')->insert([
                'content' => 'lol',
                'user_one' => 1,
                'user_two' => 2
            ]);

我得到了200响应代码,但没有201。我不明白,它似乎在post server方法验证时阻塞,因为如果我将INSERT放在条件之外,数据将插入到db中

3htmauhk

3htmauhk1#

问题是$_SERVER['REQUEST_METHOD']返回大写请求方法POST,如果条件与小写post比较,则条件失败。由于您使用laravel,laravel已内置方法来检查请求类型,并且在您的情况下,ajoutMessage方法仅用于发布请求,因此无需检查请求类型,因为您已专门为发布方法提到了路由。

if($request->isMethod('POST')){

      $donneesJson = file_get_contents('php//input');
      $donnees = json_decode($donneesJson);

       DB::table('messages')->insert([
                'content' => 'lol',
                'user_one' => 1,
                'user_two' => 2
            ]);

   return response()->json(["message"=>"inserted successfully"],201);
}

如果看到isMethod实现,它会在内部将param转换为大写。

/**
     * Checks if the request method is of specified type.
     *
     * @param string $method Uppercase request method (GET, POST etc)
     */
    public function isMethod(string $method): bool
    {
        return $this->getMethod() === strtoupper($method);
    }

和json方法参数

/**
     * Create a new JSON response instance.
     *
     * @param  mixed  $data
     * @param  int  $status
     * @param  array  $headers
     * @param  int  $options
     * @return \Illuminate\Http\JsonResponse
     */
    public function json($data = [], $status = 200, array $headers = [], $options = 0);

相关问题