2013-12-11 249 views
0

我有一個表格,可以通過AJAX或通常的方式提交,使用提交按鈕。阿賈克斯部分是在這裏:提交表格後重定向頁面

parentForm.onsubmit = function(e) {      // e represents trigering event 
     if(srteValidateMode()){        // works only in WYSIWYG mode 
      var outputString = srteEditArea.innerHTML;  // first we prepare the text output data 
      outputString = outputString       
        .replace(/<(\/?)strong>/gi, '<$1b>') // unify output tags for all browsers -> B I P (instead of strong em div) 
        .replace(/<(\/?)em>/gi, '<$1i>') 
        .replace(/<(\/?)br>/gi, '<p>') 
        .replace(/<(\/?)div/gi, '<$1p'); 
      document.getElementById('simpleRTEoutput').value=outputString; // pass output string to hidden form field 

      if (srteAjaxSubmit) {       // ajax version - filling FormData 
       e.preventDefault();       // canceling the submit function - we will call it with Ajax 
       var srteFormData = new FormData(e.target); // getting form data from submitted form 
       var ajaxRequest = new XMLHttpRequest();  // now going to invoke AJAX 

       ajaxRequest.onreadystatechange = function() { 
       if (ajaxRequest.readyState == 4 && ajaxRequest.status == 200) { 
        srteShowInfo(ajaxRequest.responseText); // return message and display as info window 
        } 
       } 
       ajaxRequest.open("POST", e.target.action); // getting target script from form action 
       ajaxRequest.send(srteFormData);    // send FormData 

      } 
      else {           // Standard submit 
       return true;        // true = standard submit will proceed (works ok) 
      } 
     } 
     else {return false;}        // on false return form will not be submitted 
     }; 

它工作正常。現在我想添加重定向功能 - 點擊另一個(非提交)按鈕,並使用一些onclick函數來保存(執行預定義的提交)並重定向。我有這樣的想法(未測試),但不確定這可能工作,尤其是在AJAX部分。在HTML

function srteSubmitForm(redirectTo) { 
    if (srteAjaxSubmit) {     // redirect when submitted via Ajax Call 
     parentForm.submit();    // save form data 
     window.location.href = redirectTo; // change location - does it wait for previous function ? 
    } 
    else { 
     parentForm.action = parentForm.action + '?redirect=' + redirectTo; // rest handled by target PHP 
     parentForm.submit(); 
    } 
} 

按鈕,然後將如下所示:

<input type="button" onclick="srteSubmitForm(\"somepage.php?page=A\")" value="Redirect A"> 
<input type="button" onclick="srteSubmitForm(\"somepage.php?page=B\")" value="Redirect B"> 
<input type="button" onclick="srteSubmitForm(\"somepage.php?page=C\")" value="Redirect C"> 

我不知道,如果我需要等待完成的AJAX不知何故前重定向?或者其他任何方式提交後如何重定向?

沒有jQuery解決方案,請。 謝謝,1月

+2

如果您要重定向,你爲什麼要擺在首位需要AJAX,而不是隻是一個普通的形式提交重定向默認。 – adeneo

+0

我希望Ajax在處理表單內容(文章)時保存表單。但也想添加按鈕的簡單鏈接(文章列表,預覽等) - 所以我想保存(通過ajax發佈)和重定向。也許我對適當的解決方案的想法並不是最好的,我只是想不出其他的。 – John

回答

0

爲什麼不添加一個'回調'參數到你的提交方法,當調用完成時被調用。

parentForm.submit(function(status){ 
    //The call completed, you can display a confirm message 'Form submitted, 
    //now redirecting' (because it's not nice to redirect without warning ;) 
    window.location.href = redirectTo; 
}); 

而在你提交:

ajaxRequest.onreadystatechange = function() { 
    if (ajaxRequest.readyState == 4 && ajaxRequest.status == 200) { 
     srteShowInfo(ajaxRequest.responseText); 
     if(callback instanceof Function) callback(ajaxRequest.responseText); 
    } 
} 
+0

感謝Frederic,我需要一些時間才能理解(對回調不太熟悉),但我認爲我大致瞭解了這一點。只是不確定最後一行 - 「回調」函數需要定義的地方? – John

+0

我做了一個簡單的小提琴,不能讓它工作,你能指點我正確的方向嗎? [http://jsfiddle.net/Ry9zA/](http://jsfiddle.net/Ry9zA/) – John

+0

我已經採取了你想要做的事情的本質,並做出了這個簡單的例子:http:// jsfiddle。 net/7LBAR/ –