2016-12-30 164 views
-1

我需要向服務器提交數據(使用帶有表單的帖子)並捕獲返回狀態,以便我可以返回解析或拒絕。我無法使用ajax來發出XMLHttpRequest請求。我想知道如何提交表單並返回一個承諾(如'承諾構造函數'上的@SomeKittens answer)。 custom.js:Http請求狀態

var myfunction = 
{ 
    submitForm: function() 
    { 
    // Create form 
    var form = document.createElement('form'); 
    form.setAttribute('action', 'server.php'); 
    form.setAttribute('method', 'POST'); 

    var input1 = document.createElement('input'); 
    input1.setAttribute('type', 'hidden'); 
    input1.setAttribute('name', 'params'); 
    input1.setAttribute('id', 'params'); 
    input1.setAttribute('value', 'myvalue'); 

    form.appendChild(input1); 

    // Create iframe and append form to it 
    var $frame = $('<iframe style="width:500px;height:400px;display:none;">'); 
    $('body').html($frame); 
     setTimeout(function(){ 
     var doc = $frame[0].contentWindow.document; 
     var $body = $('body',doc); 
     $body.html(form); 

     // submit form 
     $(form).submit();}, 1); 
    } 
} 

的index.html:

<html> 
    <head> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script> 
    <script src="custom.js"></script> 
    </head> 
    <body> 
    <script> 
     myfunction.submitForm().done(function() { 
     alert('It works'); 
     }).fail(function() { 
     alert('Failed');}); 
    </script> 
    </body> 
</html> 

感謝

+1

'我不能使用ajax來提出請求既不XMLHttpRequest.' - 首先,如果你不能使用Ajax,那麼你當然不能使用xhr,因爲xhr是一個以ajax開頭的方法!如果你不能使用ajax,那麼你基本上只剩下使用標準表單提交機制......這導致新的頁面被加載......所以,承諾完全不可能太 –

+0

@Jaromanda,I知道它(我在那個答案中看到:http://stackoverflow.com/questions/8039402/where-is-jquery-ajax-defined-in-the-jquery-source-code)。我必須使用返回數據(服務器將返回數據)的承諾,並根據狀態顯示'它的工作'或'它失敗' – dramans

+0

不知道該問題中的任何答案將如何幫助您不使用「AJAX或XHR」 - 因爲這個問題和答案都是關於jQuery.ajax的...這是使用XMLHttpRequest的AJAX - 這是特別不是「允許」用於您的問題 –

回答

1

這不能用JavaScript來完成。表單提交會向服務器創建一個新請求,因此您將被引導至另一個頁面,而不是您所在的另一個頁面,在這種情況下,它將返回響應,如同'server.php'一樣,然後返回響應服務器。它取決於你下一步從'server.php'

爲了跟蹤服務器的狀態,你可以從'server.php'返回到請求頁面,並在返回的URL中使用查詢字符串或將你的數據添加到服務器會話並在返回頁面時捕獲它們。

+0

服務器將返回一些數據,我需要趕上(我不'因爲提交不會返回任何內容)數據並顯示「有效」(通過承諾)或「失敗」。 – dramans

+0

看看這個:http://stackoverflow.com/questions/754761/read-session-value-with-javascript – KAD

+0

'我不知道這樣做在JavaScript中提交不會返回任何東西' - 你需要使用AJAX,jQuerey.ajax返回一個「承諾」(各種),jQueery.ajax的基本機制是XMLHttpRequest ... oops,你不能使用它。似乎你要求的是不可能的 –