ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

php-Laravel与Angularjs验证json请求不良响应

2019-11-12 03:30:20  阅读:262  来源: 互联网

标签:angularjs laravel-5-2 ajax json php


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

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

这在我的本地计算机上不会发生,只有在生产环境中测试该应用程序时才会发生.

我还测试了使用403代码发送的未经授权的响应,它的工作原理完美无缺.

我测试了Laravel的两个自动验证错误(如文档所述:在AJAX请求期间使用validate方法时,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编码,当我将该文件转换为UTF-8而不添加BOM时,一切都变得正确了.

该文件为resources / lang / [语言] /validation.php,由于编码问题,在处理此文件时发送了标头.

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

标签:angularjs,laravel-5-2,ajax,json,php
来源: https://codeday.me/bug/20191112/2024295.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有