将单击的按钮不是表单中的按钮的变量值传递给 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 行。

当我点击第一个按钮时,我看到警告窗口显示“1.PHP
当我单击第二个按钮时,我看到警报窗口显示“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();
  });
  // ...
}