使用php发送POST请求后,jquery脚本无法正常工作

时间:2014-04-17 10:27:58

标签: javascript php jquery

我有一个使用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);
     }

2 个答案:

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