gpt4 book ai didi

php - Laravel 与 Angularjs 验证 json 请求错误响应

转载 作者:可可西里 更新时间:2023-11-01 01:15:21 25 4
gpt4 key购买 nike

我的网络应用程序使用 Laravel 作为后端框架,它提供了一个 Restful API,并且在前端运行 Angularjs。我通过 api 发送不同的请求并接收响应,并根据包含的响应代码和数据,向用户显示适当的消息。

最近当我使用 PUT 方法或 POST 方法发送请求时,当数据在验证过程中出现问题并且 Laravel 应该以 JSON 格式响应 422 代码时,我收到了一个带有代码 200 的文本/html 响应。然后一切出错了。

这不会发生在我的本地机器上,只有当我在生产环境中测试应用程序时才会发生。

我还测试了使用 403 代码发送的 UnAuthorized 响应,它可以正常工作。

我测试了 Laravel 的自动验证错误(如文档中所述:在 AJAX 请求期间使用验证方法时,Laravel 不会生成重定向响应。相反,Laravel 会生成包含所有验证错误的 JSON 响应。此 JSON 响应将与 422 HTTP 状态代码一起发送。)并使用以下方法:

return response()->json(compact('errors'),422);

我应该提到我使用以下方法发送 AJAX 请求:

    function save(data, url) {
return $http({
method: 'POST',
url: url,
headers: {'Content-Type': 'application/json'},
data: angular.toJson(data)
});
}
function update(data, url) {
return $http({
method: 'PUT',
url: url + data.id,
headers: {'Content-Type': 'application/json'},
data: angular.toJson(data)
});
}

不用说我完全糊涂了!


更新:这似乎是 Laravel 验证过程的问题。当验证运行时,请求变得错误。请看下面的一段代码:

public function altUpdate(Request $request){
$this->authorize('editCustomer', $this->store);
if (!$request->has('customer')){
return response()->json(["message"=>"Problem in received data"],422);
}
$id = $request->customer['id'];
$rules = [
'name' => 'required',
'mobile' => "required|digits:11|unique:customers,mobile,$id,id,store_id,$this->store_id",
'phone' => 'digits_between:8,11',
'email' => "email|max:255|unique:customers,email,$id,id,store_id,$this->store_id",
];
//return response()->json(["problem in data"],422); //this one works properly if uncommented
$validator = Validator::make($request->customer,$rules);
if ($validator->fails()){
$errors = $validator->errors()->all();
Log::info($errors);
return response()->json(["problem in data"],422);//this one is received in client side as a text/html response with code 200
}

$customer = Customer::find($id);
$customer->update(wrapInputs($request->all()));

if ($request->tags) {
$this->syncTags($request->tags, $customer);
}
$message = "Customer updated successfully!";
return response()->json(compact('message'));
}

我仍然不知道验证过程有什么问题。此代码在我的本地计算机上运行没有任何问题,但在生产服务器上出现问题。

最佳答案

我终于明白了。我添加了一个语言文件,该文件以 UTF-8-BOM 编码,当我将该文件转换为没有 BOM 的 UTF-8 时,一切都变得正确了。

该文件是 resources/lang/[the language]/validation.php,由于编码问题,在处理该文件时发送了 header 。

这个问题也帮我找到了问题所在: Laravel redirect::route is showing a message between page loads

关于php - Laravel 与 Angularjs 验证 json 请求错误响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40619389/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com