当前设置
我有这样的HTML表单。
<form id="demo-form" action="POST" method="post-handler.php">
<input type="text" name="name" value="previousValue"/>
<button type="submit" name="action" value="dosomething">Update</button>
</form>
我可能在页面上有很多这些表格。
我的问题
如何异步提交此表单,而不进行重定向或刷新页面?我知道怎么用XMLHttpRequest
。我遇到的问题是从javascript中的HTML检索数据,然后将其放入发布请求字符串中。这是我当前用于zXMLHttpRequest的方法。
function getHttpRequest() {
var xmlhttp;
if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
} else {// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
return xmlhttp;
}
function demoRequest() {
var request = getHttpRequest();
request.onreadystatechange=function() {
if (request.readyState == 4 && request.status == 200) {
console.log("Response Received");
}
}
request.open("POST","post-handler.php",true);
request.setRequestHeader("Content-type","application/x-www-form-urlencoded");
request.send("action=dosomething");
}
例如,假设demoRequest()
单击了表单的“提交”按钮时调用了javascript方法,那么如何从该方法访问表单的值并将其添加到XMLHttpRequest
?
编辑
尝试从下面的答案实施解决方案,我已经像这样修改了表格。
<form id="demo-form">
<input type="text" name="name" value="previousValue"/>
<button type="submit" name="action" value="dosomething" onClick="demoRequest()">Update</button>
</form>
但是,在单击按钮时,它仍在尝试将我重定向到(我不确定的位置)并且未调用我的方法?
按钮事件监听器
document.getElementById('updateBtn').addEventListener('click', function (evt) {
evt.preventDefault();
// Do something
updateProperties();
return false;
});
POST字符串格式如下:
name=value&name2=value2&name3=value3
因此,您必须获取所有名称及其值,然后将其放入该格式。您可以迭代所有输入元素,也可以通过调用获取特定的输入元素document.getElementById()
。
警告: 必须使用encodeURIComponent()
所有名称,尤其是值,&
以使字符串中包含的内容不会破坏格式。
例:
var input = document.getElementById("my-input-id");
var inputData = encodeURIComponent(input.value);
request.send("action=dosomething&" + input.name + "=" + inputData);
另一个简单得多的选择是使用FormData
对象。这样的对象可以保存名称和值对。
幸运的是,我们可以FormData
从现有表单中构造一个对象,并将其直接发送到XMLHttpRequest
的方法 send() :
var formData = new FormData( document.getElementById("my-form-id") );
xhr.send(formData);
问题内容: 这是javascript: 这是PHP: 这里的问题是价值。当console.log()用于返回值时,为什么$ _POST [‘email’]为null 。有人可以帮忙吗?我认为这个问题在后面。(不确定) 请不要jQuery 。我知道如何在jQuery中执行此操作,但我想学习如何在javascript中执行此操作。是的,谢谢 问题答案: 你的问题是,与请求为发送不。删除设置内容类型的行
问题内容: 我的表单有点复杂,我希望通过本地发布一个元组数组来简化服务器端(PHP)处理。 表单的第一部分代表一个 User : First Name Last Name Email Address etc 表单的第二部分代表一 棵树 : Fruit Height etc 问题是我需要能够以相同的形式为单个 用户发布 多个 树 。我想以 树 的数组作为单个 用户 发送信息,但这对于表单而言可能太复
问题内容: 我的表单有点复杂,我希望通过本地发布一个元组数组来简化服务器端(PHP)处理。 表单的第一部分代表一个 User : First Name Last Name Email Address etc 表单的第二部分代表一 棵树 : Fruit Height etc 问题是我需要能够以相同的形式为单个 用户发布 多个 树 。我想以 树 的数组作为单个 用户 发送信息,但这对于表单而言可能太复
问题内容: 我必须承认我有点困惑…我以前从未做过,而且我显然缺少一些东西 当我通过http.post将数据传递到我的php文件时,我似乎无法收集数据… 有人可以告诉我为什么这行不通吗? FormData会显示在控制台日志中,并且可以确定正在写入文件。但是,看起来好像没有数据传递。 这是在我的php文件中。试图将提交表单中的数据写入文件中(只是测试)。 问题答案: 经过大量研究后,我发现这有点像ph
我试图发布从我的纽曼脚本生成的超文本标记语言报告,并在Jenkins作业中使用以下设置。 我正在工作区的/newman目录中生成newman报告。但是,在project dashboard上,我可以看到指向报告的链接,但当我单击它时,它会显示处理报告时出错,因为找不到“”。为什么它试图从错误的目录中读取报告? 控制台输出中有一条消息: 记录测试结果 脚本:
XMLHttpRequest对象是AJAX的关键。 自Internet Explorer 5.5于2000年7月发布以来,它一直可用,但直到2005年的AJAX和Web 2.0开始流行才被完全发现。 XMLHttpRequest(XHR)是一种API,可以被JavaScript,JScript,VBScript和其他Web浏览器脚本语言用于使用HTTP在Web服务器之间传输和操作XML数据,在网页