[英]How can I get an ajax request to behave like a standard HTTP form submit
這是用於restlet服務器上的html表示形式,用於使表單可以使用PUT和DELETE http動詞來提交。
<script type="text/javascript">
function submitFormXMLHttpRequest(meth, url, formname){
var xmlhttp;
var params;
var form = document.getElementById(formname);
var fieldcount = form.elements.length;
if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
var form = document.getElementById(formname);
for (i=1; i<=(fieldcount-1); i++) {
if(form.elements[i].name != "") params = params + form.elements[i].name + "=" + form.elements[i].value + "&";
}
//alert(params);
xmlhttp.open(meth, url+"?"+params, true);
xmlhttp.send();
}
</script>`
`(插入HTML代碼示例似乎是一個問題,但這是表格)
表單id =“ r1” action =“ resource1” method =“ PUT”!-一些ftl標記表單輸入字段等-按鈕onclick ='submitFormXMLHttpRequest(“ PUT”,“ resource1”,“ r1”);' type =“ button”提交/按鈕輸入type =“ submit” value =“ Submit” /`
當按下按鈕時,PUT動詞會顯示在服務器日志中,並且會得到正確處理。 但是,restlet通常會以提交結果的下一個表示形式進行響應。 這不會發生,因為它作為ajax請求進行處理。 如果我添加Response.Redirect(url, true)
它將最終以GET形式再次提交表單。
您的restlet將您的請求作為Ajax請求處理的事實可能是由於XMLHttpRequest設置的標頭。
為了避免這種情況,您可以嘗試刪除此標頭:
if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
xmlhttp.setRequestHeader("x-requested-with", null);
}
因為通常,它將用“ XMLHttpRequest”定義,表示它是一個ajax請求。
編輯:我知道與播放! 在框架中,您可以通過使用x-http-method-override=
強制使用方法(PUT&DELETE),該x-http-method-override=
非常有用,因為這兩個操作在html頁面中並不常見。 也許您可以在restlet中找到類似的東西?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.