Php 使用jQuery AJAX从Laravel 5中的联系人表单发送电子邮件

Php 使用jQuery AJAX从Laravel 5中的联系人表单发送电子邮件,php,jquery,ajax,email,laravel-5,Php,Jquery,Ajax,Email,Laravel 5,我在Laravel blade中有联系方式: <div id="contactform"> <meta name="_token" content="{{ csrf_token() }}" /> <ul> @foreach($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul>

我在Laravel blade中有联系方式:

<div id="contactform">
    <meta name="_token" content="{{ csrf_token() }}" /> 
    <ul>
    @foreach($errors->all() as $error)
        <li>{{ $error }}</li>
    @endforeach
    </ul>
    {{ Form::open(array('route' => 'contact_store', 'id' => 'contact', 'name' => 'contact')) }}
        <input type="text" id="firstName" name="firstName" placeholder="{{ trans('index.first_name') }}" class="required" />
        <input type="text" id="lastName" name="lastName" placeholder="{{ trans('index.last_name') }}" class="required" />
        <input type="text" id="email" name="email" placeholder="{{ trans('index.email') }}" class="required email" />
        <textarea id="message" name="message" cols="40" rows="5" placeholder="{{ trans('index.message') }}" class="required"></textarea>
        <input id="submit" class="send_it" name="submit" type="submit" value="{{ trans('index.submit_button') }}" />
    {{Form::close()}}
    <div id="response"></div>
    <div id="loading"><img src="images/loader.gif" alt="loader"></div>
</div>
我有jQuery验证器验证集,它工作正常。验证通过后,我将调用ajax发送数据

 $('#submit').click( function(e) {
     $.ajaxSetup({
         header:$('meta[name="_token"]').attr('content')
      })
      e.preventDefault;
      if( $('#contact').valid() ) {
         ajaxSubmit();
       }
       else {
           $('label.error').hide().fadeIn('slow');
       }
       });
   });

function ajaxSubmit() {
$('#loading').show();
$('#submit').attr('disabled', 'disabled');
var firstName = $('#firstName').val();
var lastName = $('#lastName').val();
var email = $('#email').val();
var message = $('#message').val();

var data = 'firstName=' +firstName+ '&lastName=' +lastName+ '&email=' +email+ '&message=' +message;

$.ajax({
    url: '/',
    type: 'get',
    dataType: 'json',
    data: data,
    cache: false,
    success: function(response) {
            $('#loading, #contact, .message').fadeOut('slow');
            $('#response').html('<h3>'+Lang.get('index.email_sent')+'</h3>').fadeIn('slow');
    },
    error: function(jqXHR, textStatus, errorThrown) {
            $('#loading').fadeOut('slow');
            $('#submit').removeAttr('disabled');
            $('#response').text('Error Thrown: ' +errorThrown+ '<br>jqXHR: ' +jqXHR+ '<br>textStatus: ' +textStatus ).show();
    }
});
return false;
}
在我的ContactFormRequest.php中,我有:

public function authorize()
{
    return true;
}
public function rules()
{
    return [
        'firstName' => 'required',
        'lastName' => 'required',
        'email' => 'required|email',
        'message' => 'required|min:10'
    ];
}
}
我配置了config/mail.php:

'driver' => env('MAIL_DRIVER', 'smtp'),
'host' => env('MAIL_HOST', 'smtp.gmail.com'),
'port' => env('MAIL_PORT', 465),
'from' => ['address' => null, 'name' => null],
'encryption' => env('MAIL_ENCRYPTION', 'ssl'),
'username' => env('mymail@gmail.com'),
'password' => env('mypass'),
'sendmail' => '/usr/sbin/sendmail -bs',
我在参考资料/views/email中添加了名为mail.blade.php的刀片文件。 我在js中使用jquery validator设置的验证工作正常,但当验证正常并且需要发送ajax时,我得到了错误: 抛出错误:SyntaxError:JSON中位于位置0的意外标记<
jqXHR:[object object]
textStatus:parsererror


我认为来自控制器的json没有很好地传递,但我不知道如何修复它。

问题在于csrf令牌没有随表单发送。 所以我补充说

var _token = $('[name="_token"]').val(),

并将其与其他表单数据一起发送,一切正常。

关于
return-response()->json($response,200)?你能告诉我们结果吗?
console.log()
jqXHR
textStatus
errorshorn
↵↵ 官方分裂…}↵ ↵↵↵↵", 状态:200,状态文本:“确定”}textStatus->parserror errorhorn->SyntaxError:Unexpected token<在JSON中的位置0(…)您正在从服务器接收HTML,但您告诉ajax数据类型是json。您得到的确切响应文本是什么?这可能会给您一些返回内容的指示是的,您是对的。现在显示了我的成功函数,但邮件没有发送。我不熟悉邮件,很难从您的代码中分辨出来。我需要什么吗在日志中?
'driver' => env('MAIL_DRIVER', 'smtp'),
'host' => env('MAIL_HOST', 'smtp.gmail.com'),
'port' => env('MAIL_PORT', 465),
'from' => ['address' => null, 'name' => null],
'encryption' => env('MAIL_ENCRYPTION', 'ssl'),
'username' => env('mymail@gmail.com'),
'password' => env('mypass'),
'sendmail' => '/usr/sbin/sendmail -bs',
var _token = $('[name="_token"]').val(),