将单击按钮(不是表单中的按钮)的变量值传递给 ajax url?

pass variable value of the clicked button (not button in a form) to ajax url?

在idx.php head 标签中,我有一个这样的脚本:

<script type="text/javascript">
$(document).ready(function(){
var alamat="1.php";
//$('button[name="test"]').click(function(){
//var alamat= $(this).val();
//alert(alamat);
//});
    
    $('.search-box input[type="text"]').on("keyup input", function(){
        /* Get input value on change */
        var inputVal = $(this).val();
        var resultDropdown = $(this).siblings(".result");
        if(inputVal.length){
            $.get("backend-search.php", {term: inputVal}).done(function(data){
                // Display the returned data in browser
                resultDropdown.html(data);
            });
        } else{
            resultDropdown.empty();
        }
    });
    
    // Set search input value on click of result item
    $(document).on("click", ".result p", function(){
        $(this).parents(".search-box").find('input[type="text"]').val('');
                $.ajax({
                type: "POST",
                //url: "1.php",
                url: alamat,
                data: {name: $(this).text()},
                success: function(msg){
                    $("#hasil").html(msg)
                },
                error: function(){
                    alert("failure");
                }
            });
        $(this).parent(".result").empty();
    });
});
</script>

并且在同一个 idx.php 中,在 body 标签中,我有这个:

  <button name="test" class="btn" value="1.php"><a href="idx.php">THIS</a></button>
  <button name="test" class="btn" value="2.php">THAT</button>

在脚本的第 2 行,我将变量 alamat 值硬编码为“1.php”
然后在 $ajax 中为 url 我使用那个 alamat 变量值。
代码按预期运行。

现在我试图让 alamat 变量根据单击哪个按钮是动态的。
所以我注释了 (//) 脚本的第 2 行,并取消了第 3 行到第 6 行的注释。

当我单击第一个按钮时,我看到警告 window 显示“1.php”
当我单击第二个按钮时,我看到警报 window 显示“2.php”。
所以我认为 alamat 变量有一个值,就像我硬编码一样。

但是 $ajax url 似乎没有任何价值,因为在我单击其中一个“.result p”列表后它就静止不动了。所以看起来单击按钮的 alamat 变量值没有传递给 $ajax url 调用。

所以我的问题是:
我该如何编码才能使 $ajax url 值可以是“1.php”或“2.php”(基于单击的按钮)?


如何让 alamat 变量值(从第 3 行到第 6 行产生)继续 $ajax url:alamat ?

您在函数内部重新声明 alamat,这会生成一个全新的(局部作用域的)变量。直接说:

alamat = $(this).val();

这将设置您已经在函数外声明的(全局)alamat 变量。所以你完成的代码将是:

var alamat="1.php";
$(document).ready(function(){
  $('button[name="test"]').click(function(){
    alamat = $(this).val();
  });
  // ...
}