使用CSRF令牌的POST(内部服务器错误)

时间:2019-09-02 11:15:35

标签: jquery ajax laravel

在Jquery ajax的帮助下,我试图编辑表单中的数据。 根据其他解决方案,我已经在meta和ajax设置中都包含了csrf令牌。

$.ajaxSetup({
  headers: {
    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
  }
});

在标题中

<meta name="csrf-token" content="{{ csrf_token() }}">

jQuery

$.ajax({
  type: "POST",
  url: "{{url('api/edit-data')}}",
  data: {
    id: id,
    name: name,
    contact: contact,
    email: email,
    valley: valley,
    paddress: paddress,
    taddress: taddress,
    qualification: qualification,
    ts: ts,
    experiences: experiences,
    tob: tob,
    es: es,
    level: level,
    ey: ey,
    cn: cn,
    cv: cv,
  },


  success: function(res) {
    console.log(res.sessiondata);
    //  alert('successful');
  }
});

控制器

 public function editdata(Request $request)
    {

        $id = $request->id;
        $data['name'] = $request->name;
        $data['contact'] = $request->contact;
        $data['email'] = $request->email;
        $data['valley'] =$request->valley;
        $data['paddress'] = $request->paddress;
        $data['taddress'] = $request->taddress;
        $data['qualification'] = $request->qualification;
        $data['ts'] =  $request->ts;
        $data['experiences'] = $request->experiences;
        $data['tob'] = $request->tob;
        $data['es'] = $request->es;
        $data['level'] = $request->level;
        $data['ey'] = $request->ey;
        $data['cn'] = $request->cn;
        $data['cv'] = $request->cv;
        if(cv::find($id)->update($data))
        {
            return response([
                'sessiondata' => $data
            ]);
        }else{
        return response([
            'sessiondata'=> $request->name
        ]);
        }

    }

实际错误

  

POST http://127.0.0.1:8000/api/edit-data 500(内部服务器错误)

关于此错误,已经有很多解决方案。 我已经相应地关注了他们,但我仍然收到此错误。 我已经在jQuery的标头中同时包含了csrf_token。 感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

这对我有用,尝试一下。 var token =“ {{csrf_token()}}”,

$.ajax({
  method: "POST",
  url: "{{url('api/edit-data')}}",  
  data: {
    _token:token,
    id: id,
    name: name,
    contact: contact,
    email: email,
    valley: valley,
    paddress: paddress,
    taddress: taddress,
    qualification: qualification,
    ts: ts,
    experiences: experiences,
    tob: tob,
    es: es,
    level: level,
    ey: ey,
    cn: cn,
    cv: cv,
  },
  success: function(res) {
    console.log(res.sessiondata);
    //  alert('successful');
  }
});

在ajax调用之前在变量中生成令牌。

答案 1 :(得分:0)

提交数据时,您可以按以下方式添加令牌:


    val file = FileInputStream("file.txt")
    val inStream = ObjectInputStream(file)

    // Method for deserialization of object
    val item = inStream.readObject() as CoinListItem

    inStream.close()
    file.close()

简历是您的模型课吗?如果是这样,则可以在控制器中像这样获取数据:

var name = $("input[name=name]").val();
var password = $("input[name=contact]").val();
var email = $("input[name=email]").val();

... other fields ...

/* I would change here the url() helper by route() with route name */

$.ajax({
    url: "{{url('api/edit-data')}}",
    method: "post",
    dataType : "json",
    data : { _token : "{{ csrf_token() }}", name: name, contact: contact,
                email: email, ...    },
    success:function(data){

          console.log(data.sessiondata);

    }
    error:function(data){

          console.log(data.sessiondata);

    }

});

欢呼!