【问题标题】:Using a Jquery variable with ajax request使用带有 ajax 请求的 Jquery 变量
【发布时间】:2021-10-26 16:53:46
【问题描述】:

我正在创建一个 Laravel 网络应用程序中的以下代码。

function approverDelete(ctl) {
  var id = $(ctl).data("id");
  // Call Web API to delete a approver
  alert(id) // This gives expected result
  $.ajax({
    url: "{{ route('delete.approvers', 'id') }}",
    type: 'DELETE',
    success: function (approver) {
      $(ctl).parents("tr").remove();
    },
    error: function (request, message, error) {
      handleException(request, message, error);
    }
  });
}

id 应该被计算为一个整数,如果我在上面放置一个 alert(id),我会在警报中得到预期值。

但是,当此代码运行时,实际请求的 url 被发送到 http://example.com/admin/approvers/delete/id 而不是预期的 http://example.com/admin/approvers/delete/9(或任何 id 值)

如果我将url: "{{ route('approvers.delete', 'id') }}," 替换为url: "http://example.com/admin/approvers/delete/"+id,,它将完全按预期工作。

据我所知,它应该适用于命名路由方法,事实上,如果我在使用命名路由方法时删除id,它会因缺少参数而出错。

编辑:添加请求的源视图

EDIT2:添加更多信息

因此,问题似乎在于 Larvel 将 "{{ route('delete.approvers', 'id') }}" 视为仅在刀片中使用。

如果我添加

@php
$id = "test";
@endphp

在脚本块之前并更改为"{{ route('delete.approvers', $id) }}" $id 将被评估为变量并将请求发送到预期的url。

【问题讨论】:

  • 你试过没有 qoutes 到 id 吗? url: "{{ route('approvers.delete', id) }}"
  • 我做到了。我已经把id 包起来了。当我不将id 括在引号中时,它会作为未定义的常量返回,但正如我所说,我可以在同一函数中在此之前的 alert(id) 1 行字面上给出预期的结果。我将在我的问题中添加更多代码
  • 我会这样写路由: route('delete.approvers', ['id' =>id] )
  • 在这里试试这个反引号{{ route('delete.approvers', ${id} ) }} 反引号在这里关闭,我不能在 cmets 中使用反引号

标签: jquery laravel laravel-8


【解决方案1】:

当 Laravel 解析刀片模板时,它会解析 {{ }} 中的任何内容。

alert(id) 有效,因为它没有被 Laravel 解析,这就是为什么当我使用 id 而不是 'id' 时,我也会得到一个未定义的常量。删除引号后,Laravel 将其视为变量。

Laravel 文档确实提供了一种通过使用 @{{ }} 来处理这个问题的方法,但这似乎只能在 script 块之外使用。

现在我必须对 url 进行硬编码,直到我可以用另一种方式解决它

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-14
    • 1970-01-01
    • 1970-01-01
    • 2020-06-05
    相关资源
    最近更新 更多