我正在尝试使用纯JavaScript XMLHTTPREQUEST库发布表单数据。我的javascript函数首先获取所有html表单数据并进行清理,并在将其粘贴到对象之前检查其格式是否正确。然后,普通请求库用于发送带有正确标题的JSON.stringify(Object)
。问题是我正在我的Apache localhost上对其进行测试,并且它不会将数据发送到指定的php文件。它仅将数据作为GET请求连接到我的Url标头中。
let reqObj = new XMLHttpRequest();
var elem = document.getElementById(msgContan);
//add event listener for request
reqObj.addEventListener("progress", function(eve) {
if (eve.lengthComputable) {
//show progress on download using view
jsView.elementShowMover(elem, strPos,endPos,moveMs);
document.getElementById(msgElemnt).innerText = Math.round(eve.loaded/eve.total * 100) + "% Complete";
}
});
reqObj.addEventListener("load", function(eve) {
if (reqObj.status >= 200 && reqObj.status < 300) {
//elem.style.display = "none";
console.log('Completed');
}
});
reqObj.addEventListener("error", function(eve) {
document.getElementById(msgElemnt).innerText = "Failed to post data.";
});
reqObj.addEventListener("abort", function(eve) {
document.getElementById(msgElemnt).innerText = "Data post was cancelled.";
});
//set timeout @ 30 seconds
reqObj.timeout = 30000;
//open network request
reqObj.open('POST', 'localhost/myprojects/pages/app/web_app/getter.php');
//set http-headers
reqObj.setRequestHeader('Content-Type', 'application/json');
//send the request
reqObj.send(JSON.stringify(answ.jObj));
有人可以帮我提供一个线索,为什么会发生这种情况,以及如何在本地主机上测试POST请求?
@@ epascarello给出了正确的诊断来解决我的问题。因此,我正在发布它。即使请求了POST
,也已将连接到我的URL的数据和不变的GET请求发送给我
不取消表单提交。
要取消表单提交取决于XmlHttpRequest对象的调用方式。就我而言,我使用绑定到html的onclick
事件来调用该函数。
该按钮未设置类型属性,这意味着它默认为提交。
我将按钮属性更改为type='button'
,这取消了表单提交。我的第二个问题是不执行php文件或未完成设置javascript load
事件功能内的请求,这是由于XmlHttpRequest .send
属性的第二个参数未设置为相对路径。因此,我的错误路径显示为a
网络请求
404 Not Found
与Request URL:http://localhost/myprojects/pages/localhost/myprojects/pages/app/web_app/getter.php
。通过将绝对路径更改为相对路径,POST
请求已完成。