这是用于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”操作=“资源1”方法=“PUT” !--一些ftl标记表单输入字段等-- 按钮 onclick='submitFormXMLHttpRequest("PUT", "resource1", "r1");'类型=“按钮”提交/按钮 输入类型=“提交”值=“提交”/`
按下按钮时,PUT 动词会显示在服务器日志中并得到正确处理。但 ReSTLet 通常会用提交结果的下一个表示进行响应。这种情况不会发生,因为它是作为 ajax 请求进行的。如果我添加 Response.Redirect(url, true) ,它最终会以 GET 方式再次提交表单。
最佳答案
您的 ReSTLet 将您的请求作为 Ajax 请求处理的事实可能是因为 XMLHttpRequest 设置的 header 。
为了避免这种情况,您可以尝试删除此 header :
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 和 DELETE)这非常有用,因为这两个操作在 html 页面中并不常见。也许你可以在reSTLet中找到类似的东西?
关于javascript - 如何让 ajax 请求的行为类似于标准 HTTP 表单提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8848299/