php Laravel正在发送GET而不是POST请求

zbq4xfa0  于 2023-01-29  发布在  PHP
关注(0)|答案(4)|浏览(161)

我有一个问题与Laravel和POST请求。我的路线被定义为POST和 AJAX 中使用的方法是POST,但它不断发送GET请求。如果我改变路线到未定义的路线,然后它发送POST,但如果我的目标是这个路线定义为POST,它发送GET请求。
AJAX :

$.ajax({
    method: "POST",
    url: "{{ url('admin/rentacar/save_availability_for_d') }}",
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    },
    data: $(form).serialize(),
    dataType: "json",
    success(result){
        //
    }
});

途径定义为:

Route::post('save_availability_for_d', [
    'as' => 'save_availability_for_d', 
    'uses' => 'RentacarController@saveCarAdjustment'
]);

meta标记中包含CSRF令牌:

<meta name="csrf-token" content="{{ csrf_token() }}">

这是当我尝试发送 AJAX 请求时在控制台中发生的情况:

XHR finished loading: GET "http://www.carsrental.me/public/me/admin/rentacar/save_availability_for_d".

如果我在末尾添加一个随机字符来指向不存在的路径,就会出现这种情况

XHR failed loading: POST "http://www.carsrental.me/public/admin/rentacar/save_availability_for_dd".
dffbzjpn

dffbzjpn1#

这可能不是Laravel的问题。我见过如果服务器配置有一点不正常就会发生这种情况。发生的情况是站点被设置为https,Apache配置被设置为将http,端口80的请求重定向到端口443。但在这个过程中,它失去了对request-method(和GET参数)的跟踪。
不确定这是你的问题,这是一个全有或全无的事情。但它可能值得一看。

gxwragnw

gxwragnw2#

正如@Claymore在上面的回答中所指出的,这几乎总是取决于服务器的配置方式以及API/route的调用方式。(端口443)请求,任何http(端口80)POST请求将被服务器重定向到https,并作为get请求接收。这是我的主要问题,因为我们最近安装了ssl证书,没有'我无法更改移动的应用程序中的API调用协议,这导致请求失败/不需要的请求。

f0brbegy

f0brbegy3#

请尝试此操作,同时不要忘记该高速缓存

$.ajax({
      url: '{{route('save_availability_for_d')}}',
      dataType: 'json',
      type: 'POST',
      data: $(form).serialize(),
      success: function (result) {
      }
});
lp0sw83n

lp0sw83n4#

非常有趣的效果,这里还没有描述:
在我的例子中,我的URL在末尾包含一个斜杠"/"。
就像这样:

$.ajax( '/my-function/', {
        type: 'POST',
        data: {
            'xxx': '{{ $yyy }}',
            '_token': '{{ csrf_token() }}'
        }
    }).done(function(data){
        console.log('DONE data: %o', data);
        if(data) {
            ...            
        }
    }).fail(function(data){
        ...;
    }).always(function(data){
        ...;
    });

从POST到GET的重定向已经完成(通过jquery,顺便说一句),我感到困惑。
删除URL末尾的斜线可以修复它。
也就是说,像这样:

$.ajax( '/my-function', {
        type: 'POST',
        data: {
            'xxx': '{{ $yyy }}',
            '_token': '{{ csrf_token() }}'
        }
    }).done(function(data){
        console.log('DONE data: %o', data);
        if(data) {
            ...            
        }
    }).fail(function(data){
        ...;
    }).always(function(data){
        ...;
    });

相关问题