【问题标题】:Form auto submit ajax not working表单自动提交ajax不起作用
【发布时间】:2011-09-25 10:58:59
【问题描述】:

我通过 jQuery ajax 将一些变量从一个文件传递到另一个包含表单的 php 文件。在传递数据以在其中包含以下代码的表单页面上,值正在正确传递,并且字段正在填充正确的条目,我可以通过萤火虫响应来做到这一点,但页面不是自动提交。他们有什么我应该寻找的东西是防止表单自动提交。如果我直接访问表单页面,我可以看到自动提交作品。

<?php 
$title = $_POST['title'];
$wrapper = $_POST['wrapper'];?>

<form action="test.php" method="post" id="publish">
  <input type="text" value="<?php echo $title ?>" name="title">
  <textarea name="wrapper"><?php echo $wrapper?></textarea>
  <input type="submit" value="Submit">
</form>

<script>
 window.onload = function(){
 document.getElementById('publish').submit();
}
</script>

发送值的 ajax 代码如下所示

$.ajax({
   type: "POST",
   url: "process.php",
      data: {
     title: 'test',
     wrapper: 'testing123'
     },
   success: function(msg){
     alert( "Data Saved: " + msg );
   } 
});

【问题讨论】:

标签: php javascript jquery forms submit


【解决方案1】:

找出不同之处:

getElementById('publishForm')

id="publish"

【讨论】:

  • 抱歉,这是 stackoverflow 上的错字。我让它们都与 id=form 相同。值被正确传递,但表单没有自动提交。
  • 重新输入代码而不是使用原始代码会引入差异。您这样做添加了一个错误,很有可能您也删除了一个。你的实际代码是什么样的?
  • 代码看起来和我上面的完全一样。我在页面上没有其他内容。通过 ajax 提交值的另一个页面包含 ajax 函数,这里不需要显示,因为它正在提交值并且表单页面正在正确接收值..
  • 弹出你的 javascript 控制台(chrome/firefox 中的 shift-ctrl-J)。我感觉您会看到有关在没有用户干预的情况下自动提交表单的安全通知。有什么理由不能直接将原始表单提交到“test.php”?
  • @mark 在 JavaScript 控制台中没有安全错误或任何类型的错误。这两个文件都在同一台服务器上,也是同一个文件夹。不管怎样,我更新了我的问题以包括发出请求的 ajax 调用。
【解决方案2】:

从我看到的自动提交链接到“publishForm”

但是,您的表单 ID 是“发布”

这可能是代码无法正常工作的原因。

【讨论】:

    【解决方案3】:

    也许您应该向我们展示调用者代码而不是处理程序代码。您正在处理的最有可能是在 AJAX 调用期间未运行 JS - PHP 页面处理是服务器端的。

    您可以考虑使用 PHP Curl 而不是 JS 发送表单?这可能会解决它直接加载但从另一个页面调用时失败的问题。

    【讨论】:

    • 我更新了问题并包含了发送值的 ajax 代码。
    【解决方案4】:

    据我了解,HTML 是通过 AJAX 加载的,对吗?如果是这样,则不会触发 window.onload,因为页面已经加载(AJAX 不计算在内)。只需这样做:

    <script type="text/javascript">
       document.getElementById('publish').submit();
    </script>
    

    【讨论】:

      【解决方案5】:

      编辑

      分解:

      • 您在 SourcePage.php 上的代码(我编了这个名称以供参考)正在通过 AJAX 请求将数据发布到 process.php
      • process.php 然后将“title”和“wrapper”注入到 html 标记中,并将带有一些 javascript 的 html 返回到 SourcePage.php
      • 然后您期望在 SourcePage.php 上显示返回的 html 的结果字符串 (msg) 将使该字符串中的 javascript 执行。

      要使其正常工作,您需要做一些事情。

      1. 从 html 解析传入的 javascript。
      2. 将传入的已解析 HTML 注入 SourcePage.php 的标记中。
      3. 将解析出来的 JavaScript 传递给 JavaScript 的 eval 函数。

      这样做应该从 process.php 中获取页面并成功执行 SourcePage.php 上的 JavaScript 代码。

      如果您期望 JavaScript 会在服务器上运行,那么恐怕您会误认为服务器(php 运行时)不会在服务器上执行 JavaScript。也许服务器上的重定向将实现您的目标(无论是什么)。

      原创

      试试这个:http://jsfiddle.net/NiceGuy4263/eJLMS/

      【讨论】:

      • 这与问题无关。正如我在上面的帖子中提到的,如果直接访问页面,自动提交就可以工作,所以这不是问题,它只是在通过 ajax 接收值时不起作用。
      猜你喜欢
      • 2011-11-18
      • 1970-01-01
      • 1970-01-01
      • 2011-02-12
      • 2015-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多