我有一个使用php生成的页面,在我从页面发送一个帖子请求后,javascript停止工作。我该如何解决?我需要使用php更改我的页面内容。 我的脚本看起来像:
$(function(){
my code here...
});
我正在使用此功能发送请求:
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);
}
答案 0 :(得分:2)
我猜测当你说“javascript停止工作”时你的意思是那些绑定了javscript函数的事件并没有激活那个函数。
我认为问题的根源是:
document.body.innerHTML=xmlhttp.responseText
如果在页面加载时将函数绑定到事件,则将其绑定到特定元素上的事件。运行上面的内容时,删除页面正文中的所有元素并将其替换为新元素。新的可能具有相同的类/ id,但它们是没有任何事件约束的新元素。
有两种解决方案:将所有事件绑定封装在一个函数中,您可以在页面加载和上面替换页面之后运行,也可以只使用委托事件,其中所有事件都与body元素本身绑定。< / p>
修改强> 我看到问题被标记为jQuery(我想知道为什么ypou在这种情况下不使用$ .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
});
});
有关详细信息,请参阅jQuery docs on .on()
第二次修改
要使用第一个选项(9en封装函数中的所有事件),然后根据与上例相同的事件,将文档准备好更改为:
function set_events(){
$('#foo').click(function(){
alert('Foo clicked');
});
$('.bar').change(function(){
//do something
});
}
$(function(){
set_events();
});
然后改变你的ajax响应habndler xmlhttp.onreadystatechange = function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200){
document.body.innerHTML=xmlhttp.responseText;
set_events();
}
};
答案 1 :(得分:-1)
您可以使用此功能发送请求,并且不要忘记添加jquery文件
function sendRequest(param1,param2)
{
$.post('index.php',{ 'name': param1,'password':param2}, function(data)
{
if(data)
{
alert('success');
}
});
}