$ request-> ajax()始终返回false

时间:2019-10-13 23:27:03

标签: jquery ajax laravel laravel-blade

我面临着一种奇怪的行为,根本不知道为什么以及如何解决它。我是PHP / Laravel / Ajax的新手,所以请当心^^

我的刀片形式:

<form method="post" action="{{ route('postContact') }}" id="id_post_contact">
    @csrf
    <input class="form-control" type="text" name="in_email" placeholder="contact@email.com">
    [...]
    <button class="btn" type="submit">Submit Question</button>
</form>

<div>
    <script>
        $("#id_post_contact").submit(function(e) {
            e.preventDefault();

            var form = $(this);
            var url = form.attr('action');
            var data2Send = form.serialize();

            $.ajax({
                type:'POST',
                url:url,
                headers:{
                    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content'),
                },
                data:data2Send,
                dataType:'JSON',
                cache:false,
                //contentType:'application/json',
                success: function(data) {
                    alert(data.success);
                }
            });
        });
    </script>
</div>

我的路线:

Route::post('/contact', 'BasisController@postContactEmail')->name('postContact');

我的控制器postContactEmail方法:

public function postContactEmail(Request $req){
    dd(
        $req->ajax(),
        $req->isXmlHttpRequest(),
        $req->all()
    );

    return response()->json(['success' => 'Got Simple Ajax Request.']);
}

由于我忽略的原因,我的 $ req-> ajax()总是返回 false

在这里问我的第一个问题之前,我已经尝试了很多事情,但没有任何效果,特别是直到现在,相同的代码仍然可以正常工作,所以我真的一无所知。

唯一不同的是我的Laravel版本已从5.8更改为6.2。

我不知道为什么我的表单无法正确发送数据,我的标头请求:

Accept  
text/html,application/xhtml+xm…plication/xml;q=0.9,*/*;q=0.8
Accept-Encoding 
gzip, deflate, br
Accept-Language 
fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3
Connection  
keep-alive
Content-Length  
149
Content-Type    
application/x-www-form-urlencoded
Cookie  
__cfduid=da74c7ad6c9ff7514e482…E_OPTINVEST_CONSENT=1; _gat=1
Host    
fake-site.tld
Referer 
https://fake-site.tld/
TE  
Trailers
Upgrade-Insecure-Requests   
1
User-Agent  
Mozilla/5.0 (Windows NT 10.0; …) Gecko/20100101 Firefox/69.0

我的标头响应:

cf-cache-status 
DYNAMIC
cf-ray  
5254def1febccdd7-CDG
content-encoding    
br
content-type    
text/html; charset=UTF-8
date    
Sun, 13 Oct 2019 22:50:09 GMT
expect-ct   
max-age=604800, report-uri="ht….com/cdn-cgi/beacon/expect-ct"
server  
cloudflare
vary    
Accept-Encoding
X-Firefox-Spdy  
h2

P.S .:我的jquery版本为2.2.4(即使使用3.4.1版本,其行为也相同, $ req-> ajax()将始终返回false

2 个答案:

答案 0 :(得分:0)

您似乎没有提供X-Requested-With标头,而Request::ajax只是检查了此标头的存在(或至少曾经有过。)

查看以下问题:Laravel angularjs Request::ajax() always false

有关为标题提供jQuery.ajaxCross-Domain AJAX doesn't send X-Requested-With header

的问题,请参见

答案 1 :(得分:0)

谢谢你们=)

在这里公开我的问题也有助于我解决它们^^

我通过仅将ajax脚本“推”到主布局的末尾,标签之前来解决了问题,如下所示:

<form method="post" action="{{ route('postContact') }}" id="id_post_contact">
    @csrf
    <input class="form-control" type="text" name="in_email" placeholder="contact@email.com">
    [...]
    <button class="btn" type="submit">Submit Question</button>
</form>

@push('stack_js_foot')
    <script>
        $("#id_post_contact").submit(function(e) {
            e.preventDefault();

            var form = $(this);
            var url = form.attr('action');
            var data2Send = form.serialize();

            $.ajax({
                type:'POST',
                url:url,
                headers:{
                    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content'),
                },
                data:data2Send,
                dataType:'JSON',
                cache:false,
                //contentType:'application/json',
                success: function(data) {
                    alert(data.success);
                }
            });
        });
    </script>
@endpush

从我的角度来看,我仍然不了解这种行为...尽管我们始终可以在任何地方触发/声明javascript,但只要将它封装在标记中,我总是可以的。那就是我到目前为止所做的(成功的)

如果有人知道为什么,我会很乐意听/学=)

再次感谢您的帮助