簡體   English   中英

如何獲得一個像標准HTTP表單提交一樣的Ajax請求

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM