【问题标题】:External POST form through iframe通过 iframe 的外部 POST 表单
【发布时间】:2014-10-29 03:41:20
【问题描述】:

我正在尝试获取一个包含 POST 表单的页面,以在 iframe 中加载,以便用户能够确认删除列表等操作。我已经成功地将 JS 和表单页面加载到 iframe 中,但是当我单击表单内的操作时,它不会更新列表。相反,它只是刷新页面。

表单运行良好,因为如果我尝试在浏览器中手动访问content-url 并更新表单,它运行良好。

如何让 iframe 内容而不是父页面刷新并在 iframe 本身内加载响应?我到底做错了什么?

感谢任何帮助!

这是我的代码:

HTML:

<button class="myclass" content-url="<?php bloginfo('siteurl') ?>/?a_action=delete_auction&pid=<?php the_ID(); ?>">Delete Me</button>
               <div class="popup"><iframe id="mynewiframeid" name="myframename" src=""></iframe></div>

JS:

  $(document).ready(function() {      
  $(document).click(function(e) {
      if ($(".popup").is(":visible")) {
        $(".popup").fadeOut("fast")
      }
  });

 $(".myclass").click(function() {
      if (!$(".popup").is(":visible")) {
        $('#mynewiframeid').attr('src',$(this).attr('content-url'));
        $(".popup").fadeIn("slow");
      }
      return false;
  });

  $(".popup").click(function(e) {
      e.stopPropagation()
  })
 });

表格:

  <div class="popup_content"> 
            <h3> You are about to delete <b><?php echo $title; ?></b>!</h3>
            <?php
            if(isset($_POST['yes_confirm']))
            {
                $s = "update ".$wpdb->prefix."posts set post_status='trash' where id='$pid'";
                $wpdb->query($s);
                echo '<div class="deleted_item_ok">';
                printf(__('Your item has been deleted successfully!'));
                echo '</div>';
            }
            else
            {
    ?>
            <form method="post">
            <div class="are_you_sure_delete">
            <?php
            _e('Are you sure you want to delete this item?');
            ?>
            </div>
 <button class="button-small button-w-green" type="submit" id="submits" name="yes_confirm">Yes, Delete</button>
 <button class="button-small button-w-red" type="submit" id="submits" name="no_confirm">No!</button>
            </form>
            <?php } ?>
            </div>

【问题讨论】:

    标签: javascript php ajax iframe


    【解决方案1】:

    您正在尝试用以下 js 代码替换“popup”类中的 html..

    HTML => <div class="popup"><iframe id="iframeid" src=""></iframe></div>
    JS => $('.popup').html(response);
    

    这会将上面 HTML 中的 iframe 元素替换为响应..!因此响应来后,页面内没有 iframe..

    如果您确实想使用 iframe,我认为您不必处理 AJAX。相反,只需更改 iframe 的 src。您可以使用以下js代码..

    $(document).ready(function() {      
          $(document).click(function(e) {
              if ($(".popup").is(":visible")) {
                $(".popup").fadeOut("fast")
              }
          });
    
         $(".myclass").click(function() {
              if (!$(".popup").is(":visible")) {
                $('#iframeid').attr('src',$(this).attr('content-url'));
                $(".popup").fadeIn("slow");
              }
              return false;
          });
    
          $(".popup").click(function(e) {
              e.stopPropagation()
          })
      });
    

    Fiddle (with fake src urls)

    【讨论】:

    • 谢谢!这是完全有道理的。现在,我需要弄清楚为什么没有使用上述脚本设置 src。可能与该页面上每个项目旁边的 class="myclass" 具有相同的按钮有关,并且 iframe 不知道要设置哪个 src URL。也许需要在某处添加 getelementbyid?
    • 我认为与 class="myclass" 具有相同的按钮不会有问题。因为点击函数使用$(this)获取content-url,所以总是获取到你点击的按钮的content-url...
    • 点击按钮后是否检查了iframe的“src”属性?控制台有js错误吗?
    • 完全没有错误,它只显示为 表示,当我进入一个只有有 1 个帖子,src 加载正常。这让我相信这更多地与在同一页面上有多个项目有关(只是不同的 ID ofc)。
    • 当您更改代码时,它应该显示 id="mynewiframeid",而不是 id="iframeid"。不应该吗?顺便说一句,我在答案中添加了一个小提琴......
    【解决方案2】:

    首先纠正以下错误,然后看看是否有效:

    1. 在您的右括号后缺少分号
    2. 您关闭 php 标记并在您继续使用 url 之后立即添加另一个关闭 php 标记
    3. 你正在寻找的是你的内容网址中的这个:

      &lt;?php bloginfo('siteurl') . '/?a_action=delete_auction&amp;pid=' . $the_ID; ?&gt;

      1. 什么是_ID()?我没有看到那个功能。如果存在,它必须返回您将存储在变量 $the_ID 中的值。您还必须在按钮标记之前调用该函数才能获取该变量。
      2. 在您的 JS 中,您需要将所有内容包装在 $(document).ready(function() {}
      3. 您似乎正在尝试执行 GET 请求而不是 POST 请求,因为您不是在正文中而是在 url 中发送任何数据
      4. 第一个 .click 函数末尾缺少分号
      5. 我什至没有查看所有其他 .click 函数,因为其中有一些重复和更多奇怪的东西

    【讨论】:

    • 该功能运行良好。 the_ID() 工作正常,因为它在之前的函数中获取了查询集。重复的 JS 是一个错误,因为我正在测试其他东西并忘记删除它。非常感谢您的回复!
    猜你喜欢
    • 1970-01-01
    • 2017-01-21
    • 2021-02-12
    • 2010-12-16
    • 2010-12-06
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 1970-01-01
    相关资源
    最近更新 更多