在下面的代码中,我尝试将一些数据发布到表中,然后从表中检索几条记录。出于测试目的,我只在php中包含一个虚拟查询,它返回一个有效的xml。
但Javascript readystate只能达到readystate 1(两次)。由于php似乎工作正常,我怀疑我已经错误地编写了javascript脚本。是"请求"是否存在问题?变量?
$(document).ready(function() {
$('form').submit(function(event) { //Trigger on form submit
$('#name + .throw_error').empty(); //Clear the messages first
var name = $('input[name=name]').val();
var request = !window.XMLHttpRequest ? new ActiveXObject('Microsoft.XMLHTTP') : new XMLHttpRequest;
request.onreadystatechange = function() {
if (request.readyState == 4 && request.status == 200) {
var xml = request.responseXML;
var dynamiclist = '';
document.getElementById("myLink").innerHTML = '';
var posts = xml.documentElement.getElementsByTagName("post");
for (var i = 0; i < posts.length; i++) {
var Msg = posts[i].getAttribute("Msg");
alert("test");
var dynamiclist = dynamiclist + '<article class="middleContent"><header><h2><a href="#" title="Post">' + Msg + '</a></h2></header> </article>';
document.getElementById("myLink").innerHTML = dynamiclist;
};
};
};
request.open('POST', 'process.php', true);
request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
request.send('name=' + name);
});
});
&#13;
答案 0 :(得分:2)
在这里使用jQuery是有意义的。
简单的解决方案很可能只是简单地删除request.open()中的最后一个“true”,这使得请求成为异步的,非阻塞的(无论如何它应该是真的应该)。 MDN还在onreadystatechange上声明你不应该将它用于同步请求(也就是具有“true”作为open()的第三个参数的请求)
来源:https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest
答案 1 :(得分:0)
尝试阻止触发默认表单事件:
$('form').submit(function(event) {
event.preventDefault();
这可以防止表单元素重新加载浏览器窗口。