【问题标题】:Attach all fields form a from to ajax request将所有字段从 from 附加到 ajax 请求
【发布时间】:2013-12-14 21:05:41
【问题描述】:

我有一个包含各种不同类型字段的 HTML 表单。输入、选择、隐藏和文本区域。我已尝试将所有表单数据附加到 ajax 请求,但未发送 POST 数据。获取所有表单数据而不仅仅是命名单个字段的原因是用户可以根据需要添加更多字段。

    function saveProductEdits(f){
    var url = 'func/editProduct.php?func=saveEdits';
    $.ajax({
        url:url,
        data:$('#edit_form').serialize(),
        type:'POST',
        beforeSend:function(){
        },
        success:function(e){
            alert(e);
        }
    });
}

PHP:

if(isset($_GET['func'])){
        if($_GET['func'] == 'saveEdits'){
            if(!empty($_POST)){
            }else{
                echo 'Post data not sent';
            }
        }else{
            echo 'unknown function';
        }
print_r($_POST); //shows empty array
    }else{
    }

HTML:

<form id="edit_form">
  //various inputs generated at run time
  <input type="button" value="Save Changes" onclick="saveProductEdits(this)" /> //button to submit
</form>

我不断收到“未发送发布数据”。

更新:

网络标签的屏幕截图

我完全确定,但我认为数据没有发送。

更新表格

<p>
  <label for="product_name">Product Name: </label>
  <input id="product_name" type="text" placeholder="Product Name" class="basic_field" value="Product Name PHP" />
</p>
<label for="main_cat">Main Catagory: </label>
<select id="main_cat">
  php generated options
</select>
<div id="cats_list">
  <p>
    <label for="sub_cat_1">Sub Catagory 1: </label>
      php generated options
    </select>
  </p>
</div>
<br/>
<a onclick="newCatField('2','Hair Pieces','6')">Add another Catagory</a>
<input type="hidden" id="count_cats" value="2" />
<div id="sizes">
  <p>
    <label>Size: </label>
    <input type="text" id="size_1" value="1" /> 
    <label>Quantity: </label>
    <input type="number" id="quant_1" value="100" /> 
  </p>
</div>
<a onclick="newSizeField('1')">Add another Size</a>
<input type="hidden" id="size_count" value="1" />
<p>
  <label for="keywords">Keywords: </label>
  &nbsp;&nbsp;&nbsp;Link a catagory: 
  <select onChange="addCatToKeywords(this,'keywords')" class="basic_field">      
    <option>Add...</option>
    php generated options
  </select>
  <textarea id="keywords" class="basic_field">php content</textarea>
</p>
<p>
  <label for="desc">Description: </label>
  <textarea id="desc" style="">php content</textarea>
</p>

在运行时添加字段的示例: 这确实有效,并将 1 添加到每个 on 的 id 和一个计算添加字段的隐藏值。

function newCatField(c,u,m){
    $.ajax({
        url:'func/getCats.php',
        type:'POST',
        data:{used:u},
        success:function(e){
            if(count === parseInt(m)){
            }else{
                document.getElementById('cats_list').innerHTML += '<p><label for="sub_cat_'+count+'">Sub Catagory '+count+': </label><select id="sub_cat_'+count+'"><option>Please Select</option>'+e+'</select></p>';
                count++;
                document.getElementById('count_cats').value = parseInt($('#count_cats').val()) + 1;
            }
        }
    });
}

【问题讨论】:

  • 您是否检查过浏览器控制台以查看传出的 HTTP 请求是什么样的?
  • Uncaught SyntaxError: Not enough arguments on line url:'func/editProduct.php?func=saveEdits',
  • 那个错误没有多大意义。在“saveEdits”功能之前还有其他代码吗?
  • 现在没有我把它移到顶部,仍然收到没有发送数据的消息。我通过在 ajax 请求上方的变量中定义 url 来摆脱控制台错误
  • 那么表单选择器是否正确?查看控制台的网络选项卡中实际发送的内容

标签: javascript php jquery ajax forms


【解决方案1】:

$.serialize()

this 函数可能就是您要找的。

$( "form" ).on( "submit", function( event ) {
    event.preventDefault();
    console.log( $( this ).serialize() );
});

【讨论】:

  • 对不起,我错过了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-17
  • 1970-01-01
  • 2020-09-10
  • 2016-08-29
  • 1970-01-01
相关资源
最近更新 更多