0

我有一个正常的表单,有时会返回一个文件或将用户重定向到另一个页面。这是一种报告形式,他们可以在其中查看 PDF、图表(页面)、Excel 或 HTML(页面)的结果。

我没有也不能提交 AJAX。我只有以下代码:

<script type="text/javascript">
$('#myForm').submit(function(){
    $('.loading').fadeIn();
    return;
});
</script>

<form id="myForm" action="script.php">
    <input type="text" name="first_name" />
    <input type="submit" value="Submit" />
    <div class="loading">Loading...</div>
</form>

这是一个通用案例来举例说明我的实际代码。我想要的是获得表单的返回(在我的情况下只是文件下载时的真正返回)以删除加载或放置错误消息。

那可能吗?

4

2 回答 2

0

为什么不能使用 AJAX 解决方案?无论如何。您可以将您的提交定位到一个隐藏的 iframe,该 iframe 又调用一个 JS 函数。看看这个:

<script>
function onReturn(msg) {
  alert(msg);
}
$('#myForm').submit(function(){
    $('.loading').fadeIn();
    return;
});
</script>

<!-- HTML markup -->
<iframe name="uTarget" style="display:none;"></iframe>
<form id="myForm" action="script.php" target="uTarget">
 [...]
</form>

然后在最后的 script.php 中,您执行以下操作:

<?php
echo "<script>window.top.onReturn('This is being sent from the script!');</script>";
?>
于 2013-07-02T12:39:21.050 回答
0

您可以使用 iframe 并将表单发布到其中。iframe 将上传文件,并在完成后发回消息。

像这样的东西:

<script type="text/javascript">
    $(document).ready(function(){
        $('#myForm').submit(function(){
            $('.loading').fadeIn();
        });
    });

    function onReturn(success){
        if(success == "true"){
            $('.loading').fadeOut();
            // Show the PDF?
        } else {
            $('.loading').html('something went wrong!');
        }
    }
</script>

<form id="myForm" target="controller" method="post" action="script.php">
    <input type="text" name="first_name" />
    <input type="submit" value="Submit" id="submit"/>
    <div class="loading" style="display:none">Loading...</div>
</form>

并在您的 script.php 中类似于:

<?php
    $success = isset($_POST['first_name']) && $_POST['first_name'] == "Grigolon" ? "true" : "false";
    echo "<script>window.top.onReturn('$success');</script>";
?>
于 2013-07-02T12:35:56.170 回答