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

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 に答える
0

AJAX ソリューションを使用できないのはなぜですか? いずれかの方法。JS 関数を呼び出す非表示の iframe を送信対象にすることができます。これを見てください:

<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 に答える