【问题标题】:how the page content will reload after ajax successajax成功后页面内容如何重新加载
【发布时间】:2013-04-20 19:33:11
【问题描述】:

对于给定的 php 和 javascript 代码,如何在 jquery ajax 成功函数后仅重新加载页面内容,而不是整个页面。最初它会显示

成功

ajax 调用后会显示为

失败

重新加载整个页面..

php代码:

 <?php
require 'dbconnect.php';
$sql="select * from tbl_status where id='1'";
$res=mysql_query($sql);
$row=mysql_fetch_array($res);
if($row['status']=='1')
{
 ?>
Success <div class="status" style="visibility:hidden;">0</div>
 <?php
 }
 else
 {
 ?>
 Failed
<div class="status" style="visibility:hidden;">1</div>
 <?php
 }
 ?>
 <input type="submit" class="send"/>

Javascript 代码:

<script type="text/javascript">
$(function(){
$('.send').click(function(){
var status=$('.status').text();
  $.ajax({
     type: 'POST', 
       url: 'http://localhost/status/updatestatus.php',
           data: 'status='+status,
         success  : function (e)
         {
           var response=e;
           alert(response);

         },
         error: function()
         {
         alert('error');
         }
      });
});
});
</script>

【问题讨论】:

  • 你想重新加载页面??或者你不想......这令人困惑......
  • 我不想重新加载整个页面,只重新加载页面内容
  • 好吧好吧..那你为什么要使用 location.reload() ? ..你能告诉我们你想把内容放在哪里吗??
  • 当我单击提交按钮时,数据库表中的状态列将更改为“0”,结果显示为警报,然后“成功”如何更改为“失败”而不重新加载整个页面
  • 检查我的更新答案

标签: php jquery ajax


【解决方案1】:

试一试。如果有一些问题,因为它是用记事本写的。

index.php

<?php
require 'dbconnect.php';
$sql="select * from tbl_status where id='1'";
$res=mysql_query($sql);
$row=mysql_fetch_array($res);
<div id="response">
if($row['status']=='1')
{
?>
   Success <div class="status" style="visibility:hidden;">0</div>
<?php
}
else
{
?>
Failed
<div class="status" style="visibility:hidden;">1</div>
<?php
}
?>
</div>
<input type="submit" class="send"/>


<script type="text/javascript">
$(document).ready(function(){
  $('.send').click(function(){
  var status=$('.status').text();
  $.ajax({
     type: 'POST', 
       url: 'http://localhost/status/updatestatus.php',
           data: 'status='+status,
         success  : function (data, status)
         {
           $("#response").html(data.status);
         },
         error: function()
         {
           alert('error');
         }
      });
});
});
</script>

updatestatus.php

<?php
require 'dbconnect.php';
$sql="update tbl_status set status=$_POST['status'] where id='1'";    
$res=mysql_query($sql);
$count = mysql_affected_rows();

if($count > 0){
    return json_encode(array('status'=>$count));
}else{
    return json_encode(array('status'=>0));
}

?>

【讨论】:

    【解决方案2】:

    我已使用此代码更改状态并在页面上显示更改后的值。这是一个 Javascript 函数,它使用对 PHP 的 Ajax 请求来更改数据库中的状态值。

    function changeStatus(divID,id,action,frontOrAdmin)
    {
    
    
            xmlhttp=getobject();
            var query="id="+id+"&action="+action+"&frontOrAdmin="+frontOrAdmin;
            $oldStatus = document.getElementById(divID).innerHTML;
            document.getElementById(divID).innerHTML='<img src="images/loading_icon.gif">';
            xmlhttp.onreadystatechange=function()
            {
                    if (xmlhttp.readyState==4)
                    {
                            var response = xmlhttp.responseText;
                            var responseArr = response.split(",");
    
                            if(($.trim(responseArr[1])=="0")||($.trim(responseArr[1])=="1")){
                               document.getElementById(divID).innerHTML=responseArr[0];
                            }
                            else{           
                                alert(responseArr[0]);
                                document.getElementById(divID).innerHTML=$oldStatus;
                            }
                    }
            }
            xmlhttp.open("GET","pass.php?type=changestatus&"+query,true);
            xmlhttp.send(null); 
    }
    

    【讨论】:

      【解决方案3】:

      如果您在重新加载页面时遇到问题,那么您可以使用

      window.location.href=window.location.href;

      希望对你有帮助

      【讨论】:

        【解决方案4】:

        使用加载而不是重新加载成功

        ...
         success  : function (e)
             {
               $('your id or class name').load(php_file_name +'your_id_or_class_to_refresh');
               var response=e;
               alert(response);
               location.reload();
             },
        ....
        
        
        // location.reload(); // <-- does not work so
        

        【讨论】:

          【解决方案5】:

          考虑到您的 ajax 工作正常...您得到的响应是 HTML

          你不需要调用 location.reload().. 您只需要将响应附加到 DOMtree..

          更新

          HTML

          ....
          ?>  //close php tag
          <div id="displayStatus">  //create new div with id displayStatus
          <?php
          if($row['status']=='1')
          {
           ?>
              Success <div class="status" style="visibility:hidden;">0</div>
          <?php
           }
           else{
           ?>
              Failed <div class="status" style="visibility:hidden;">1</div>
           <?php
            }
           ?>
           </div> //end the div
          

          JQUERY

          success  : function (e)
               {
                 var response=e;
                 alert(response);
                 $('#displayStatus').html(response); //replace the content in that
               },
          

          updatestatus.php

           $status= $_POST['status'];
          //make you query ..update your table 
           if($status == '0'){
               echo 'Failed <div class="status" style="visibility:hidden;">1</div>';
           }else{
              echo 'Success <div class="status" style="visibility:hidden;">0</div>';
           }
          

          【讨论】:

          • 是的,问题出现了,它想在 status='1' 时显示 'success' 而在 status='0' 时显示 'failed'。所以,当我们使用ajax更新status='0'时,'success'会在ajax成功函数后变为'failed'而不重新加载整个页面,只重新加载页面内容..
          【解决方案6】:

          问题是:你的 jQuery 部分和你的 PHP 部分不兼容。 你并没有真正改变你的退货状态,只是发短信。要发出“失败”的信号,请在 PHP 端使用一些标头。例如:

          在 PHP 中:

          header('HTTP/1.0 403 Forbidden');
          die('Failed');
          

          那么你的 ajax 将引发一个“错误”处理程序而不是“成功”。

          您应该只使用“成功”处理程序并在以下位置测试返回的文本:

          在 JavaScript 中:

          success: function(data) {
             if (data == 'Failed') {
                 alert('ERROR');
                 location.reload();
             } else {
                  alert('Success');
             } 
          },
          

          【讨论】:

            猜你喜欢
            • 2011-12-14
            • 2018-05-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-11-19
            • 2021-05-02
            • 1970-01-01
            相关资源
            最近更新 更多