【问题标题】:Can't pass a variable to ajax url无法将变量传递给 ajax url
【发布时间】:2019-10-17 12:12:32
【问题描述】:

我正在尝试使用 ajax 将 id 传递给我的控制器。

我想在 ajax URL 中使用 id var,但它不起作用。

我在哪里设置 ID

<input type="checkbox" class="form-control traite" data-id="{{ $conversation->id }}"></td>

jquery 函数

$(document).on('click', '.traite', function() {
$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});
var id = $(this).data('id');
$.ajax({
    url: "{{ route('traitements.change_traite_conversation', " + id + ") }}",
    type:"POST",
    dataType:"JSON",
    data: {
        "_token": "{{ csrf_token() }}",
        "id" : id
    },
    success: function() {
        console.log("Updated");
    },
    error: function(xhr) {
    console.log(xhr.responseText); // this line will save you tons of hours while debugging
    // do something here because of error
    }
});

console.log("Error");
});

web.php

Route::post('conversation/{id}/traiter', 'TraitementController@change_traite_conversation')->name('traitements.change_traite_conversation');

我得到的错误

{
"message": "Undefined variable: id",
[...]
}

我不明白为什么我不能将我的 ID 传递给 ajax URL,我通常可以 console.log 它并且它正在工作!

【问题讨论】:

  • 你的小胡子 ({{ ... }}) 之间的所有内容都由 Laravel 解析,所以你不能在小胡子语法的中间附加你的 id(这是你的 js 代码的一部分)。您必须找到另一种方法来获取您的 id
  • 很高兴知道!谢谢,我现在正在尝试这样做

标签: javascript php ajax laravel


【解决方案1】:

HTML。在 data 属性中传递它而不是 id 你可以传递 url 不是吗?

<input type="checkbox" class="form-control traite" data-url="{{ route('traitements.change_traite_conversation', $conversation->id) }}"></td>

jquery,在 jquery 中获取那个 data-url。

$(document).on('click', '.traite', function() {
$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});
var url = $(this).data('url');

$.ajax({
    url: url,

否则,您可以直接传递 php 变量,但在您的情况下,您需要动态,所以我认为它不起作用。

$.ajax({
        url: "{{ route('traitements.change_traite_conversation', $conversation->id) }}",

【讨论】:

  • 现在laravel找不到conversation变量,我想是因为我用foreach这个
  • 如果你能找到动态data-id,那么你也可以生成动态data-url,不是吗?正如我在回答中向您展示的那样,您可以生成动态 url 并将其传递给 ajax 调用的 url。谢谢,
  • 我不知道为什么,但对话变量不起作用:"message": "Undefined variable: Conversation", 编辑:可能是我的错,正在尝试解决它 EDIT2:工作,谢谢
【解决方案2】:

您应该在 html 中添加 fullurl attr 然后使用 javascriptjQuery

HTML 文件中:

<input type="checkbox" class="form-control traite" data-id="{{ $conversation->id }}" data-fullurl="{{ route('traitements.change_traite_conversation', $conversation->id) }}"></td>

Javascript/JQuery 脚本中:

$(document).on('click', '.traite', function() {
$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});
var URL = $(this).data('fullurl');
var id = $(this).data('id');
$.ajax({
    url: URL,
    type:"POST",
    dataType:"JSON",
    data: {
        "_token": "{{ csrf_token() }}",
        "id" : id
    },
    success: function() {
        console.log("Updated");
    },
    error: function(xhr) {
    console.log(xhr.responseText); // this line will save you tons of hours while debugging
    // do something here because of error
    }
});

console.log("Error");
});

【讨论】:

  • Laravel 现在找不到会话变量
  • 检查$conversation 是否从控制器传递到您的视图。
  • 没什么,最后两个是一样的,但我想他没看到你的
  • @Laravel 我没有看到你回答。关于差异,我已经解释了关于通过 fullurl attr 添加到 html 并放置 @Petoux 完整代码的原因,他可以直接复制和使用它。
  • @Petoux 很高兴知道。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-16
  • 1970-01-01
  • 2014-04-23
  • 2012-04-21
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
相关资源
最近更新 更多