2012-09-25 56 views
1

我將如何提交一個表單到兩個不同的位置,而阿賈克斯(跨域問題)submiting一種形式,以兩個不同的網址沒有Ajax

我喜歡下面想着什麼。只有我將如何通過params?從這裏取

< form action="urlOne.com/something" method="post" onsubmit="postToUrl("urlTwo.com/something");"> 
     <input type="text" value="hello" name="hi"/> 
     <input type="submit" value="submit"> 
    </form> 

功能>>JavaScript post request like a form submit

function postToUrl(url, params) 

     { 
      var form = $('<form>'); 
      form.attr('action', url); 
      form.attr('method', 'POST'); 

      var addParam = function(paramName, paramValue){ 
       var input = $('<input type="hidden">'); 
       input.attr({ 'id':  paramName, 
          'name': paramName, 
          'value': paramValue }); 
       form.append(input); 
      }; 

      // Params is an Array. 
      if(params instanceof Array){ 
       for(var i=0; i<params.length; i++){ 
        addParam(i, params[i]); 
       } 
      } 

      // Params is an Associative array or Object. 
      if(params instanceof Object){ 
       for(var key in params){ 
        addParam(key, params[key]); 
       } 
      } 

      // Submit the form, then remove it from the page 
      form.appendTo(document.body); 
      form.submit(); 
      form.remove(); 
     } 

謝謝。

+0

您可以在服務器端執行此操作嗎...... Id通常會將表單一次提交給處理器腳本,然後通過cURL將數據發送給其他兩個操作。 – prodigitalson

+0

如果您想要從客戶端*執行兩個職位*,您必須明確地執行此操作。 AJAX是您唯一的選擇。 FORM標籤只定義了內容和一個可能的目標/方法。 –

回答

4

您只能在窗口中一次發送一個表單。如果您嘗試發佈兩種形式,則一個帖子會阻止另一個。

解決方法是將兩個窗體發佈到不同的窗口。您可以設置第一種形式的目標張貼到一個iframe頁面或一個新的窗口:

form.attr('target', '_blank'); 

這樣,兩個職位會在不同的窗口加載,並不會停止對方。

+0

謝謝,新學到的東西 – Mega3on

+0

它可以在某些用戶瀏覽器上被彈出式窗口攔截器阻止嗎? – Mega3on

+0

@ Mega3on:好點。是的,如果您打開一個新窗口,可能會被某些瀏覽器阻止。 – Guffa

0

如果您使用代理服務器端,則可以使用crossdomain ajax和jQuery。

或:

使用Apache的mod_rewrite或mod_proxy的從您的 服務器請求傳遞到其他一些服務器。在您的客戶端代碼中,您只需將 請求看作是您的服務器上的實際請求 - 沒有任何瀏覽器問題 。 Apache然後發揮它的魔力,並向您提供其他服務器的請求。

這裏是一個鏈接PHP來實現這一點: http://developer.yahoo.com/javascript/howto-proxy.html#phpproxy

+0

我無權訪問服務器 – Mega3on

0

如果你只想做一個「看不見」的帖子到另一個URL ......在這種情況下,URL是workout.php

<script src="http://code.jquery.com/jquery-latest.js"></script> 
<script> 
$(function() { 
    $('form').submit(function(data) { 
    $.post('workout.php', $(this).serialize()); 
    }); 
}); 
</script> 

<form action="urlOne.com/something" method="post"> 
     <input type="text" value="hello" name="hi"/> 
     <input type="submit" value="submit"> 
</form>