2013-07-02 25 views
0

我有一個正常的形式,有時返回一個文件或重定向到另一個頁面的用戶。這是一個報告表格,他們可以在PDF,圖表(頁面),Excel或HTML(頁面)中查看結果。如何使用JavaScript/jQuery獲取沒有AJAX的表單返回?

我沒有,我不能有一個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> 

這是一個通用的案例來舉例說明我的實際代碼。 我想要的是獲取表單的返回(在我的情況下,只是文件下載時的真實返回值),以刪除加載或發出錯誤消息。

這可能嗎?

回答

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>"; 
?> 
+0

'iFrames'只爲AJAX提交是有用的。根據OP的問題:_「我沒有,我也沒有AJAX提交。」_ – War10ck

+0

您不需要使用AJAX上傳文件使用Iframe。 – putvande

+0

您不必提交ajax提交,但那麼使用iframe的目的是什麼呢?如果你不是ajaxing,那麼一個普通的表單和頁面重新加載就可以完成同樣的任務。不需要使用iframe。 – War10ck

0

爲什麼不能使用Ajax解決方案?無論如何。您可以將您的提交目標指向隱藏的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>"; 
?> 
+0

可能是一個解決方案。有使用eventListener或類似的東西的原生方式? – Grigs

+0

不AFAIK。您可以序列化表單數據並通過$ .ajax()發送它。或者您將請求定位到隱藏的iframe。歡迎來到美麗的問題解決世界。 – Eric