【问题标题】:Ajax ignoring URLAjax 忽略 URL
【发布时间】:2020-08-20 11:27:08
【问题描述】:

我尝试通过触发 onClick 事件的 JQuery 发出 ajax 请求,但是当它发送我收到的 AJAX 请求时:

PATCH http://localhost:8000/courses 405(不允许的方法)(当前页面)因为它没有得到带有id的URL

HTML

@foreach ($courses as $course)
    <tr>
      <td>{{ Form::select('year', $years, ['class' => 'form-control'], [ 'placeholder' => $course->academicYear]) }}</td>
      <td>{{ Form::select('subject', $subjects, ['class' => 'form-control'], [ 'placeholder' => $course->subject]) }}</td>
      <td>
        <a href="" id="saveCourse" class="btn btn-success pull-left">Save</a>
        <input type="hidden" id="idCourse" value="{{ $course->id }}">
      (...)

JQUERY + AJAX

$('#saveCourse').click(function(e){
        e.preventDefault();
        var id = $('#idCourse').val();

        // Ignore this logic
        var values = {year: "", subject:"", id: id};
        var parameters = ['year', 'subject'];
        var i = 0;
        $('td > select option:selected').each(function() {
            values[parameters[i]] = $(this).text();
            i++;
        });

        // Ajax request
        $.ajax({
            type: 'patch',

            // Appending the course id here not working, 
            // but if i put anything else like /blabla/ + id ajax doesn't ignore it...

            url:  '/courses/' + id,
            headers: {'X-CSRF-Token': csrf_token},
            dataType: 'json',
            data: values,

            success: function (response) {
                console.log("SUCCESS: " + response);
            },
            error: function (reject) {
                if( reject.status === 422 ) {
                    $("#error").text("Los datos dados no cumplen el formato requerido.");
                }
            }
        });
    });

WEB.PHP

/* -----COURSE_ROUTES------ */
    Route::resource('courses', 'CourseController')->except([
        'create', 'edit'
    ]);

路线

编辑

如果我在 type 中使用 POST 而不是 PATCH,则 AJAX 会获取 id。

在 GitHub 上发现了同样的问题https://github.com/jquery/jquery/issues/3944

【问题讨论】:

  • 评论不用于扩展讨论;这个对话是moved to chat
  • @DigitalDrifter 如果我记录 .val() 我得到正确的索引所以 url 没问题,我可以看到它记录但 AJAX 不知何故正在动态更改 URL。我有一个非常相似的代码在做同样的事情,它正在工作,我比较了两个文件,它们几乎是一样的。

标签: javascript php jquery ajax laravel


【解决方案1】:

PUT 和 PATCH 是请求方法。你得到的 HTTP 错误 405 意味着服务器知道请求方法,但服务不支持它。在这里阅读更多:https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/405

【讨论】:

  • 我已经知道了,这里的问题是 AJAX 在我使用 PUT/PATCH 时忽略了 URL 中的 id
  • @Repikas PUT/PATCH 被整个服务器忽略,这就是错误告诉你的内容。由于在 PUT/PATCH 的情况下会忽略整个请求,因此 id 也会被忽略。如果一个女孩忽略了你的花桶,那么她会忽略该桶中的所有单个文件,如果这有意义的话。
【解决方案2】:

不确定是否重要,但尝试 PATCH 而不是补丁

type: 'PATCH',

【讨论】:

    【解决方案3】:

    我忘了把这个条件放在控制器中更新方法的开头......现在它可以工作了!

    if(request()->ajax()) { ... }
    

    【讨论】:

      【解决方案4】:

      正如下面提到的405 (METHOD NOT ALLOWED) 基本上意味着您的ajax 请求方法PATCH 不允许用于服务器上的特定资源。

      如果您使用路由库,您可以访问他们的文档并搜索如何更改此行为。一个路由可以接受一个或多个请求方法,我假设Route::resource默认使用POST方法创建一个路由,这说明ajax请求工作在POST类型。

      【讨论】:

      • 我知道这个错误是如何发生的,而且我有带有resource 的 PUT/PATCH 路由,因为我有 update 路由,你可以在图像中看到它。这就是问题所在,没那么简单
      猜你喜欢
      • 2019-05-26
      • 2019-01-05
      • 1970-01-01
      • 2015-11-21
      • 1970-01-01
      • 2014-02-14
      • 2013-03-07
      • 1970-01-01
      • 2013-04-04
      相关资源
      最近更新 更多