Javascript 无法通过ajax将带有单选按钮数据的额外表单数据传递给php

Javascript 无法通过ajax将带有单选按钮数据的额外表单数据传递给php,javascript,ajax,Javascript,Ajax,我有一个简单的表单,我有一个单选按钮和两个隐藏字段。我想通过ajax将单选按钮值和隐藏字段值传递到php页面。单选按钮值可以正常通过,但隐藏字段不能。我在php页面中硬编码了table和id的值,以确保单选按钮的值通过测试 <input type="radio" name="contract" value="0" class="custom-switch-input"> <input type="radio" name="contract" value="1" class="c

我有一个简单的表单,我有一个单选按钮和两个隐藏字段。我想通过ajax将单选按钮值和隐藏字段值传递到php页面。单选按钮值可以正常通过,但隐藏字段不能。我在php页面中硬编码了table和id的值,以确保单选按钮的值通过测试

<input type="radio" name="contract" value="0" class="custom-switch-input">
<input type="radio" name="contract" value="1" class="custom-switch-input">
<input type="radio" name="contract" value="2" class="custom-switch-input">

<input type="hidden" name="table" value="timber_sales">
<input type="hidden" name="id" value="177">

$(document).ready(function(){
   $('input[type="radio"]').click(function(){
        var contract = $(this).val();

        $.ajax({
             url:"edit_do.php",
             method:"POST",
             data:{contract:contract,id:id,table:table},
        });
   });
});

您正在事件侦听器中设置contract的值,而不是id或table

要使其按当前的方式工作,还需要在dom中搜索隐藏字段的值

var contract = $(this).val();
var id = $('input[name="id"]').val();
var table = $('input[name="table"]').val(); 

首先需要从隐藏字段中获取值。就像您使用$this.val作为单选按钮的值一样。因此:

$(document).ready(function(){
   $('input[type="radio"]').click(function(){
        var contract = $(this).val();
        var id = $('input[name=id]').val();
        var table = $('input[name=table]').val();

        $.ajax({
             url:"edit_do.php",
             method:"POST",
             data:{
               contract: contract,
               id:id,
               table:table
             },
        });
   });
});

最好给隐藏字段一个惟一的ID属性,并通过$'myuniqueid'.val获取它们,但至少上述方法可以起作用,只要您没有任何其他名为ID或table的字段。

您的jquery事件不知道隐藏字段。试试这个:

            <form id="form1">
                <input type="radio" name="contract" value="0" class="custom-switch-input">
                <input type="radio" name="contract" value="1" class="custom-switch-input">
                <input type="radio" name="contract" value="2" class="custom-switch-input">

                <input type="hidden" name="table" value="timber_sales">
                <input type="hidden" name="id" value="177">
            </form>
            <form id="form2">
                <input type="radio" name="contract" value="0" class="custom-switch-input">
                <input type="radio" name="contract" value="1" class="custom-switch-input">
                <input type="radio" name="contract" value="2" class="custom-switch-input">

                <input type="hidden" name="table" value="timber_sales">
                <input type="hidden" name="id" value="177">
            </form>
            $(document).ready(function(){
                $('form').change(function(){
                    event.preventDefault();

                    var send = $(this).data();

                    $.ajax({
                        url:"edit_do.php",
                        method:"POST",
                        data:send,
                    });
                });
            });    

如果我发布的答案还不够,试着将你的问题标记为javascript,看看你是否能得到更多的答案。这非常有效。我会按照你的建议将其改为首选方法。除了问题文本中缺少的问题外,请阅读:在问题标签中,这是不够的。你还尝试了什么,但失败了?请参考上的SO问题,了解它们为什么不能为您工作。另一个快速问题。如果我在同一页上有多个表单,不同的id,当用户通过单选按钮更改其中一个表单的值时,从DB循环,如何确保该表单与我前面的示例一起使用?此代码仅适用于此表单id=表单。如果您添加了另一个表单-更改另一个表单时不会发生任何事情。如何更改代码以使用用户选择的任何表单进行更改?编辑此问题的答案。现在,对页面上所有表单的更改进行代码触发。如果要指定操作,请使用If$this.id=='form1',这些id是根据数据库中的行数从ma while循环创建的。每个from获得下一个数字,即表单id=1表单id=2表单id=3。这个代码会去哪里?