【问题标题】:textbox data not available in post variable in php and ajaxphp和ajax的post变量中没有文本框数据
【发布时间】:2011-05-23 21:50:51
【问题描述】:

我正在尝试编写一个具有多个文本框的表单,而无需使用 ajax 引用页面,然后在每个文本框之后将有一个名为 add 的链接,其中 POST 调用另一个名为 addnew.php 的 php。

在 addnew.php 中,我们将数据添加到数据库(postgres)中。但是我在获取 post 变量本身时遇到了问题。为了测试,我在脚本中添加了警报。

这是我的表单代码(一旦工作正常,我将更改多个文本框)

脚本代码

<script type='text/javascript'>
//<![CDATA[
$(window).load(function() {
    jQuery(document).ready(function() {

        jQuery('.add').live('click', function(event) {

            //var da='da='+ $('#da').attr('value');
            //var da = 'test';
            var da = $('form#myform').serialize();
            alert(da);
            $.ajax({
                type: "POST",
                url: "addnew.php",
                data:da,
                success: function(data) {
                    if (data === "ok") {
                        $(this).parent().fadeOut();
                        $('#results').html(data);
                    }
                    else {
                        alert(data);
                    }
                }

            });
        });

    });
});
//]]>
</script>

表单代码

<body>
<?php

for ($i=1;$i<2;++$i) {//currently only one textbox for testing purpose

 echo "<form name='myform' id='myform'>";
 echo "<input name='da' type='text' id='da' value='none'>";
 echo "<a href='#' class='add'>Add</a>";
 echo "</form>";
}
?>
<div id="results"><div>
</body>

添加new.php代码

<? php
 if( isset($_POST['da']) ) 
 {
   echo (da);
 }
?>

页面渲染的时候会有这样的。

<textbox1 data> <add button>
<textbox1 data> <add button>
<textbox1 data> <add button>
...
<textbox10 data> <add button>

我正在尝试的是

  1. 使用 for 循环创建每个文本框并在每个表单内动态添加按钮对。 (为了测试,我只创建了一对)。我应该为每一对设置表格吗?
  2. 点击添加时文本框 (#da) 中的值应通过 ajax 发送到 addnew.php。

以下代码正确显示数据

alert(da);

但在 addnew.php 文件中我没有得到 $_POST(['da'])。这是否意味着数据没有传递到文件或者有错误的 ajax 代码,最后我可以有多个具有相同 id 的表单。如果不是,那么我如何在提交表单时发送唯一的一个文本框数据,即在添加按钮之前。

【问题讨论】:

    标签: php ajax variables post


    【解决方案1】:

    您始终可以动态更改表单元素的目标/动作;因为您使用的是 jQuery,所以它会是这样的:

    $('#form').attr('action', window.location.href);

    这将设置一个表单(ID 为“form”)以对任何页面 URL 进行有针对性的操作。只要您将第二个参数传递给 attr(),您就可以重置该值 - 这基本上适用于任何事情(您可以随时更改链接的 href 等)

    【讨论】:

      【解决方案2】:

      我相信 $(window).load() 不会工作。 JQuery load 方法使用 ajax 从 url 中获取数据,url 是 load 方法的第一个参数,然后它可以在将 ajax 响应加载到调用元素后执行 oncomplete 函数。看起来好像您只为 load 方法放置了一个 oncomplete 函数,而不是要 ajaxed 的 url。我弄错了吗?见http://api.jquery.com/load/

      我还没有完全考虑清楚,但您可能只想删除第一级 ($(window).load()),然后看看会发生什么。如果你这样做,一旦页面“准备好”,代码就会添加点击处理程序。

      【讨论】:

      • 是的,你是 $(window).load() 根本不需要。但实际愚蠢的错误是 addnew.php 页面开头的
      【解决方案3】:

      没有“提交”。替换你的点击元素:

      <a href="#" class="add">Add</a>
      

      带有提交按钮:

      <input type="submit" class="add" value="Add" />
      

      <a href="#" class="add" onclick="this.form.submit();">Add</a>
      

      【讨论】:

      • 此方法仅在指定目标时才有效。我正在尝试在 ajax 期间设置 url,因为如果我稍后添加更多按钮,则可以在 ajax 调用期间更改 url。
      猜你喜欢
      • 2014-08-28
      • 1970-01-01
      • 2018-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多