如何通过ajax发送错误/成功消息而无需单击表单中的提交按钮(如果没有表单)?
我在这里做一个laravel项目,当用户将表单提交到控制器(通过表单的action属性)提交表单时,我使用了该方法,并且在controller函数内部,它可以返回带有数据的视图并重定向页面,错误/成功消息将显示,并且页面将被刷新。
return redirect()->back()->with('success', 'Successfully Added!');
但是这种情况是我想单击一个按钮,如果没有表单,也会发生同样的事情。我在按钮上添加了onclick并运行js函数以通过ajax调用控制器。但是在调用控制器之后,上面的代码无法像以前那样工作。也没有错误。
<button type="button" onclick="submit()" class="btn btn-primary"
>Submit</button>
<script>
//when click submit button
function submit(){
var _token = $('input[name="_token"]').val();
$.ajax({
url: "{{ route('RecipeController.submit') }}",
type: "POST",
data: { _token:_token
}
})
}
</script>
有人可以给我解决方案吗?
如果需要,我在下面添加了消息代码。
@if(count($errors)>0)
@foreach($errors->all() as $error)
<div class="alert alert-danger">
{{$error}}
</div>
@endforeach
@endif
@if(session('success'))
<div class="alert alert-success">
{{session('success')}}
</div>
@endif
@if(session('error'))
<div class="alert alert-danger">
{{session('error')}}
</div>
@endif
答案 0 :(得分:0)
Ajax通常期望使用JSON,因此正常的重定向或视图将不起作用。
我可以举个例子:
return response()->json(['error' => 'there was an error...'], 200);
第一个参数是一个包含数据的数组。第二个是http状态。
希望它可以帮助您解决问题。 :)
编辑:现在我有了您的留言代码。
您只需在ajax成功的情况下使用js动态添加div。
答案 1 :(得分:0)
public List<string> searchvalues(string searchname)
{
try
{
List<string> result = new List<string>();
string connectionstring = @"Data Source=DESKTOP-LTV06QJ\SQLEXPRESS;Initial Catalog=Search;Integrated Security=True";
SqlConnection conn = new SqlConnection();
conn.ConnectionString = "connection_string";
conn.Open();
SqlCommand cmd = new SqlCommand("Sp_Search", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@Emp_Name", searchname);
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
result.Add(string.Format("{0}/{1}", dr["Emp_id"], dr["Emp_Name"]));
}
conn.Close();
return result;
}
catch (Exception ex)
{
return null;
}
}
路由应定义为
$(document).ready(function() {
$(".removeproduct").click(function(){
$.ajax({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
type : 'DELETE',
url : '/user/'+report_id+'/removefromcart',
data : {report_id : report_id},
success:function(data)
{
console.log(data);
},
error : function(data)
{
console.log(data);
}
});
});
}) ;
答案 2 :(得分:0)
public function removeFromCart(Request $request, $report_id)
{
$return = array();
$check = DB::delete("DELETE FROM carts WHERE user_id='" . Auth::user()->user_id . "' AND report_id='" . $report_id . "'");
if ($check)
{
$count = Cart::where('user_id', Auth::user()->user_id)->count('id');
$return = array('success' => true, 'message' => 'Item removed to cart', 'data' => $count);
return response()->json($return);
}
}
}