2016-12-25 57 views
1

enter image description here我试图从jQuery传递一组元素到PHP Laravel。我正在进行项目更新细节。 每个人都在使用ajax发布帖子请求。它正在工作,但它每次都陷入困境,因为它需要在继续之前验证该页面中的所有字段,但PHP已经在做这件事......我需要Ajax来将该数组传递给PHP,我不需要它做同样的事情PHP正在做。所以我想跳过所有的Ajax验证规则。在POST请求期间禁用Ajax验证LARAVEL

你有什么想法吗?

这是我的代码

var token = $('input[name=_token]').val() 

$.ajax({ 
    data: {_token: token, dataOrder: orderArray}, 
    type: 'POST', 
    dataType: "json", 
    url: '/admin/projects/update/37', 
    error: function(data) { 
     instance 
     var errors = data.responseJSON; 
     console.log('server errors',errors); 
    }, 
    success: function (data) { 
     $(".content").append('<strong>Yeah</strong>'); 
    } 

});

有了这个代码,我总是得到422(无法处理的实体)

这是我的控制器核心代码

public function update(Request $data) 
    { 

    $this->validate($data, [ 

     'title' => 'required|min:3|max:255|unique:projects,title,' . $data->id, 
     'slug' =>'min:3|max:255|unique:projects,slug,' . $data->id, 
     'date' => 'required|before:now', 
     'client' => 'min:3|max:255', 
     'category' => 'required', 
     'image_list' => 'image|max:2000', 
     'description' => 'required|min:3' 

    ]); 

    $update = Project::find($data->id); 
    $update->title = $data->title; 
    $update->slug = $this->slug($data, $data->slug); 
    $update->date = $data->date; 
    $update->client = $data->client; 
    $update->category_id = $data->category; 
    $update->description = $data->description; 

    $update->save(); 
} 

屏幕截图的dd($数据 - >所有()); enter image description here

+0

你如何构建orderArray?这是序列化的数据? –

+0

orderArray是由图片ID作为KEY和简单递增循环形成的关联数组,作为VALUE。我使用的jQuery UI可排序,并保留移动元素的新位置的跟踪。每当我改变图片的位置时,orderArray将会有一个更高或更低的与图片ID相关的循环数。 – rolfo85

回答

0

参见文档:jQuery Post Ajax call

最简单的Ajax调用使用jQuery未经验证:

$.ajax({ 
    type: "POST", 
    url: "http://your.url.com", 
    data: {your: data}, 
    success: function() { // Executes on successful call }, 
}); 
+0

我发布了我的当前代码。与该代码我总是得到“422(不可处理的实体)” – rolfo85

+0

你检查了ID 37的项目是否真的存在?而且,在更新ajax调用中,'_token'变量应该是'{!! csrf_token()!!}'... – andcl

+0

是ID 37是我正在使用的测试页面。关于csrf_token,我看到很多解决方案,现在我从隐藏字段获取它的价值,并将其作为我的数据的一部分发送。早些时候,当我没有正确包含它时,我曾经遇到过其他错误,但是用这种方式,它似乎正在工作......但我不太了解......我如何使用自己的方式来包含它?我需要粘贴{!! csrf_token()!!}? – rolfo85

0

让你的HTML页面上的CSRF令牌。

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

在脚本中使用ajaxSetup方法来设置x-csrf-token标头。

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

..并从您的数据{}对象中删除_token位。

+0

我的更新页面上没有该元标记。CSFR令牌被添加为我的更新表单中由Laravel表单构建器隐藏的输入类型。 – rolfo85

+0

尝试禁用该页面上的任何javascript动作,并提交以检查它是否与ajax请求有关或者其他服务器代码是否有错误 – verax

+0

当您使用console.log(令牌)时,它会显示吗? – verax

0

我之所以在我的Ajax调用中出现Laravel表单验证错误,是因为Ajax调用是在更新表单中进行的,其中有所有其他字段,这种方式PHP期望Ajax包含所有关于所有数据的数据必填字段。

我成立了一个新的控制器独立于更新字段和一切工作