3 回答
TA贡献1784条经验 获得超9个赞
在您的控制器中,您缺少第二个参数。
所以试试这样:
public function update(Request $request, Client $client)
{
$rules = array(
'client_name' => 'required',
'client_address' => 'required',
'client_bdate' => 'required'
);
$error = Validator::make($request->all(), $rules);
if($error->fails())
{
return response()->json(['errors'=>$error->errors()->all()]);
}
$form_data = array(
'client_name' => $request->client_name,
'client_address' => $request->client_address,
'client_bdate' => $request->client_bdate
);
// You should get your client in variable $client
//Clients::find($request->hidden_id)->update($form_data);
$client->update($form_data);
return response()->json(['success' => 'Data Updated']);
}
另请注意,如果您想让您的代码看起来更简单,您可以像这样验证您的请求:
public function update(Request $request, Client $client)
{
$request->validate([
'client_name' => 'required',
'client_address' => 'required',
'client_bdate' => 'required'
])
$client->update($form_data);
return response()->json(['success' => 'Data Updated']);
}
您可以在此处阅读更多内容。
祝你好运!
TA贡献1797条经验 获得超6个赞
在您的路由文件中删除 {}Clients/{Client}
或最好将其更改为:Clients/update
,当您将 {} 放在一些文本周围时,您正在绑定一些参数(实际上是 Eloquent 模型),并且您应该在调用时提供它(提供 ID)路线。
TA贡献1805条经验 获得超9个赞
首先,让我们制定一些约定。
将您的路线定义更改为
Route::resource('clients', 'ClientsCont');
按照惯例,控制器名称应该是驼峰式大小写并以大写字母开头。路由名称通常是小写的。
接下来,确保您的控制器文件命名正确ClientsCont.php,并且类名也应该是ClientsCont. 最后,您必须为您的update()方法提供第二个参数以保存要更新的客户端对象。
客户端连接.php
namespace App\Http\Controllers;
use App\Client;
class ClientsCont extends Controller
{
// class definition
public function update(Request $request, Client $client)
{
$rules = array(
'client_name' => 'required',
'client_address' => 'required',
'client_bdate' => 'required'
);
$error = Validator::make($request->all(), $rules);
if($error->fails())
{
return response()->json(['errors'=>$error->errors()->all()]);
}
$form_data = array(
'client_name' => $request->client_name,
'client_address' => $request->client_address,
'client_bdate' => $request->client_bdate
);
$client->update($form_data);
return response()->json(['success' => 'Data Updated']);
}
}
现在,正确设置您的 Ajax 请求。
$('#client_form').on('submit', function(event){
var url;
if($('#action').val() == 'Add')
{
url = "{{ route('clients.store') }}";
}else{
url = "{{ route('clients.update') }}";
}
$.ajax({
url: url,
method: "POST",
data: new FormData(this),
cache: false,
dataType: "json",
success:function(data)
{
var html = '';
if(data.errors)
{
html = '<diV class="alert alert-danger">';
for(var count = 0; count < data.errors.length; count++)
{
html += '<p>' + data.errors[count] + '</p>';
}
html += '</div>';
}
if(data.success)
{
alert("add");
html = '<diV class="alert alert-success">' + data.success + '</div>';
$('#client_form')[0].reset();
$('#table_id').DataTable().ajax.reload();
}
$('#result').html(html);
}
})
return false;
});
通常使用return false;是停止默认事件操作和传播的首选方式。
[return false;]通常出现在 jQuery 代码中,它阻止浏览器的默认行为,阻止事件冒泡 DOM,并立即从任何回调返回。
有关完整详细信息,请参阅此媒体文章。
此外,从您的代码中,您的某些 ajax 设置是不必要的,应该省略,以便使用它们的默认值。对于大多数表单,这些默认值通常就足够了。
例如,使用jQuery Ajax 设置processData: false禁用处理表单数据并使用toString()对象的方法来形成请求数据字符串。
当您将数据设置为除 processData 设置为 false 的字符串以外的常规对象时,jQuery 不会处理该对象。该对象完全按原样传递给 Ajax 调用,并像字符串一样使用。这默认调用 toString 方法并将结果作为 Ajax 请求中的数据发送到服务器。
见这对完整的描述。确保您需要此设置,否则将其全部丢弃。
您可能需要放弃的另一个 Ajax 设置是contentType: false,除非您有充分的理由进行设置。
- 3 回答
- 0 关注
- 258 浏览
添加回答
举报