Javascript jquery脚本在使用php发送POST请求后不工作

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

我有一个使用php生成的页面,当我从页面本身发送post请求后,javascript停止工作。我怎样才能修好它?我需要使用php更改我的页面内容。 我的脚本看起来像:

我用这个函数发送请求:

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');
             }
           });
      }