[英]Show message in alert box wih ajax and json laravel
我有以下的ajax代碼:
$(function() {
// Get the form.
var form = $('#ajax-inquire');
// Get the messages div.
var formMessages = $('#form-messages');
// Set up an event listener for the contact form.
$(form).submit(function(event) {
// Stop the browser from submitting the form.
event.preventDefault();
// Serialize the form data.
var formData = $(form).serialize();
// Submit the form using AJAX.
$.ajax({
type: 'POST',
url: $(form).attr('action'),
data: formData
})
.done(function(response) {
// Make sure that the formMessages div has the 'success' class.
formMessages.removeClass('alert-danger');
formMessages.addClass('alert-success');
// Set the message text.
$(formMessages).text(response.success);
// Clear the form.
$('#fullName').val('');
$('#email').val('');
$('#telephone').val('');
$('#message').val('');
formMessages.show();
})
.fail(function(data) {
// Make sure that the formMessages div has the 'error' class.
formMessages.removeClass('alert-success');
formMessages.addClass('alert-danger');
// Set the message text.
if (data.responseText !== '') {
$(formMessages).text(data.responseText);
} else {
$(formMessages).text('Oops! An error occured and your inquire could not be sent.');
}
formMessages.show();
});
});
});
而我在控制器中的代碼:
public function postInquire(Request $request)
{
$data = array(
'tripName' => $request->tripName,
'fullName' => $request->fullName,
'email' => $request->email,
'telephone' => $request->telephone,
'bodyMessage' => $request->message
);
Mail::to('mail@domain.com')->send(new TourInquire($data));
return response()
->json(['code'=>200,'success' => 'Your inquire is successfully sent.']);
}
我發布我的ajax表單的路線是:
Route::post('/inquire', 'PostPublicController@postInquire')->name('postInquire');
使用上述代碼,我可以通過ajax請求發送郵件。 我正在嘗試在視圖中的警報框中顯示json響應消息。 但是我無法做到這一點,因為json響應消息在白頁中顯示了我發布表單的路線的網址。
查看HTML代碼:
<div class="modal-body">
<div id="form-messages" class="alert success" role="alert" style="display: none;"></div>
<div class="preview-wrap">
<img src="{{asset($tour->featuredImage->path)}}" class="preview-img thumbnail" alt="{{$tour->featuredImage->name}}">
<div class="form-wrap">
<form action="{{route('postInquire')}}" id="'#ajax-inquire" method="POST">
{{csrf_field()}}
<div class="form-group">
<input type="hidden" name="tripName" id="tripName" value="{{$tour->title}}">
<label>Name</label>
<input type="text" class="form-control" placeholder="Enter Your Full Name" name="fullName" id="fullName" required>
</div>
<div class="form-group">
<label>Email</label>
<input type="email" class="form-control" placeholder="Email Address" name="email" id="email" required>
</div>
<div class="form-group">
<label for="telephone">Phone</label>
<input type="tel" class="form-control" placeholder="Phone Number" name="telephone" id="telephone" required>
</div>
<div class="form-group">
<label for="message">Message</label>
<div class="row">
<textarea name="message" id="message" cols="30" rows="5" class="form-control"></textarea>
</div>
</div>
<button class="btn btn-primary hvr-sweep-to-right">Send Message</button>
</form>
</div>
</div>
</div>
您的HTML中有一個簡單的錯字:
id="'#ajax-inquire"
單引號'
和#
都不應該存在,這意味着您的jQuery選擇器與表單不匹配,因此您的Javascript實際上均未觸發。 表單只是正常提交,因此您最終需要使用form action
指定的URL。
該id
應指定為:
id="ajax-inquire"
旁注:從技術上講這並不重要,但是您不需要在現有的jQuery對象上使用$()
。 之所以有效,是因為jQuery接受jQuery對象作為選擇器,但是如果您不以任何方式過濾或編輯選擇器,則它是多余的。
// Here you set form as a jQuery object
var form = $('#ajax-inquire');
// You don't need "$(form)" here, "form" is all you need
$(form).submit(function(event) {
// You can simply use the existing jQuery object
form.submit(function(event) {
嘗試返回此結果,而不是此結果:
$your_json= json_encode(['code'=>200,'success' => 'Your inquire is successfully sent.']);
return view('your_view',compact('your_json'));
然后在您的視圖中:
{{json_decode($your_json)['success']}}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.