这是针对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提交表单。
答案 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中找到类似的东西?