Javascript jquery脚本在使用php发送POST请求后不工作
我有一个使用php生成的页面,当我从页面本身发送post请求后,javascript停止工作。我怎样才能修好它?我需要使用php更改我的页面内容。 我的脚本看起来像: 我用这个函数发送请求:Javascript jquery脚本在使用php发送POST请求后不工作,javascript,php,jquery,Javascript,Php,Jquery,我有一个使用php生成的页面,当我从页面本身发送post请求后,javascript停止工作。我怎样才能修好它?我需要使用php更改我的页面内容。 我的脚本看起来像: 我用这个函数发送请求: function sendPostRequest(params){ var xmlhttp=new XMLHttpRequest(); xmlhttp.onreadystatechange=function(){if (xmlhttp.readyState==4 &&a
function sendPostRequest(params){
var xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange=function(){if (xmlhttp.readyState==4 && xmlhttp.status==200)document.body.innerHTML=xmlhttp.responseText;};
xmlhttp.open("POST","catalog_main.php",false);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
document.body.innerHTML="";
xmlhttp.send(params);
}
我猜,当你说“javascript停止工作”时,你的意思是有javscript函数绑定的事件没有触发该函数 我认为问题的根源在于:
document.body.innerHTML=xmlhttp.responseText
如果在页面加载时将函数绑定到事件,则将其绑定到特定元素上的事件。运行上述命令时,将删除页面正文中的所有元素,并将其替换为新元素。新的元素可能具有相同的class/id,但它们是没有任何事件绑定的新元素
有两种解决方案:要么将所有事件绑定封装在一个函数中,您可以在页面加载和替换页面后运行该函数,如上所述;要么仅使用委派事件,其中所有事件都以技术方式绑定到body元素本身
编辑:
我看到问题被标记为jQuery(我想知道为什么在这种情况下你不使用$.ajax?)。使用jQuery,您可以按如下方式执行委派事件:而不是
$(function(){
$('#foo').click(function(){
alert('Foo clicked');
});
$('.bar').change(function(){
//do something
});
});
你可以用
$(function(){
$('body')
.on('click', '#foo', function(){
alert('Foo clicked');
})
.on('change', '.bar', function(){
//do something
});
});
有关更多信息,请参阅
第二次编辑
要使用第一个选项(9将所有事件封装在一个函数中),则基于与上述示例相同的事件,将文档更改为以下内容:
function set_events(){
$('#foo').click(function(){
alert('Foo clicked');
});
$('.bar').change(function(){
//do something
});
}
$(function(){
set_events();
});
然后将ajax响应habndler更改为
xmlhttp.onreadystatechange=函数(){
}) 您可以使用此函数发送请求,不要忘记添加jquery文件
function sendRequest(param1,param2)
{
$.post('index.php',{ 'name': param1,'password':param2}, function(data)
{
if(data)
{
alert('success');
}
});
}
也许你的JS文件有问题,bcoz如果你的JS有逻辑错误,那么下一个代码在我发送请求之前不会执行,所以没有逻辑错误。好的,你能详细解释一下我如何应用第一个解决方案吗?请举一个简单的例子)在替换页面后触发哪个事件,我如何跟踪它?替换页面时您自己执行。请参阅我的第二次编辑。我个人认为,我会使用授权版本。
if (xmlhttp.readyState==4 && xmlhttp.status==200){
document.body.innerHTML=xmlhttp.responseText;
set_events();
}
function sendRequest(param1,param2)
{
$.post('index.php',{ 'name': param1,'password':param2}, function(data)
{
if(data)
{
alert('success');
}
});
}