2009-10-13 20 views
2

我創建了一個快速原型作爲更大項目的概念證明。我需要創建一個可用的跨域POST請求,並且我有jQuery可用。jQuery POST請求 - 提交<form><iframe>

因爲我假設(請糾正我,如果我錯了),$ .ajax()將無法正常工作,因爲發出POST請求的頁面與接收請求的服務器在不同的域中,猜測最好的解決方案是使用JavaScript創建一個<iframe>,然後在那裏插入一個< form method =「post」>,其中包含隱藏的輸入和我的POST數據,然後提交。

我到底該怎麼做? (請提供代碼示例如果可能的話)。

到目前爲止,我有這樣的:

<button type="button" name="button">Make Cross-Domain POST Request</button> 

<script> 
    $('button').click(function() { 
    $('body').append('<iframe id="post_frame" style="width: 0; height: 0; border: none;"></iframe>'); 
    setTimeout(function() { 
     var frame_body = $('#post_frame').contents().find('body'); 
     frame_body.append('<form action="..." method="post"><input type="hidden" name="foo" value="bar" /><input type="submit" /></form>'); 
     // not sure what goes here (should submit the form in the iframed document once it has loaded) 
    }, 1); 
    }); 
</script> 

我知道我需要使用提交()方法,但我不知道,看起來到底是什麼喜歡,特別是因爲<形式>是在<iframe>和我應該只調用提交()後<iframe>已加載。

請讓我知道,如果您有任何建議/想法,發現任何錯誤,可以推薦更好的方法,等等。

(順便說一句,我做了前對堆棧溢出天一些搜索和可以發誓,我發現在一個相關的問題一些代碼,將是有益的。今天我找不到,但...)

回答

4

p是後期的數組變量和to是你的行動

var issuePOST = function(to, p) { 
     var myForm = document.createElement("form"); 
     myForm.method = "post"; 
     myForm.action = to; 
     if (p) { 
      for (var k in p) { 
       var myInput = document.createElement("input"); 
       myInput.setAttribute("name", k); 
       myInput.setAttribute("value", p[k]); 
       myForm.appendChild(myInput); 
      } 
     } 
     document.body.appendChild(myForm); 
     myForm.submit(); 
     document.body.removeChild(myForm); 
    }; 
+0

非常感謝您的幫助,但我想使用jQuery來增強跨瀏覽器的兼容性,並且我認爲我需要使用