javascript - 如何让 ajax 请求的行为类似于标准 HTTP 表单提交

标签 javascript http restlet

这是用于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/

相关文章:

java - 如何在超时的情况下在 ReSTLet 中调用异步 HTTP 客户端

javascript - Shadowbox 在初始页面加载时加载照片库

javascript - 我用的是tinymce,是否可以只申请一个textarea

在 AVRO 中序列化的 Python HTTP POST 请求

java - 检查 Java 中名称服务器的 dns 查找

http - 适用于 Ant 的 RESTful http 客户端

javascript - Django Ajax 通信,Django 不识别为 Ajax(使用 request.is_ajax() )

javascript - JS - 如何检测浏览器何时拒绝本地文件?

xml - 将 ReSTLet web 项目从 Intellij 部署到 apache tomcat?

java - 安卓中的 RestKit?