2013-12-11 131 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/ –