如何获得ajax请求以表现为标准HTTP表单提交

时间:2012-01-13 09:23:29

标签: javascript http restlet

这是针对e 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代码示例似乎有问题,但这里是表格)

form id =“r1”action =“resource1”method =“PUT” ! - 一些ftl标记表单输入字段等 - button onclick ='submitFormXMLHttpRequest(“PUT”,“resource1”,“r1”);'类型=“按钮”提交/按钮 input type =“submit”value =“Submit”/“

按下按钮时,PUT动词显示在服务器日志中并正确处理。但是,重新安装通常会回应下一次提交结果的表示。这不会发生,因为它作为ajax请求进行。如果我添加Response.Redirect(url, true),它最终会第二次作为GET提交表单。

1 个答案:

答案 0 :(得分:0)

您的restlet将您的请求作为Ajax请求处理的事实可能是因为XMLHttpRequest设置了标头。

为了避免这种情况,您可以尝试删除此标题:

if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp = new XMLHttpRequest();
    xmlhttp.setRequestHeader("x-requested-with", null);
}

因为通常,它将使用“XMLHttpRequest”定义,表明它是一个ajax请求。

编辑:我知道玩Play!在框架中,您可以通过使用x-http-method-override=强制方法(PUT&amp; DELETE),这可能非常有用,因为这两个操作在html页面中并不常见。也许你可以在restlet中找到类似的东西?