【问题标题】:Updating database with jQuery AJAX works only one time使用 jQuery AJAX 更新数据库只能使用一次
【发布时间】:2013-01-31 14:42:46
【问题描述】:

我正在尝试使用 jQuery 更新数据库。该功能工作得很好,但只有一次。如果我想再次更新数据库,我必须刷新页面并清除缓存。我正在使用 MODX 革命,我不确定这是否与这个问题有关。代码如下:

<html>
  <head>
    <script language="javascript" type="text/javascript" src="//ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.3.min.js"></script>
  </head>
  <body>

<script>
$(document).ready(function(){
 $('#paina').submit( function updateTitle() {
        var mail = $("#output").val();
        $.ajax({  
            type: "POST",  
            url: "gettable.php",  
            data: "mail="+ mail,  
            cache: false,
            success: function(data){
                alert(mail);  
            }  
        });
        return false;
    });
});

  </script>

<form id="paina" name="test" action="javascript:updateTitle()" method="post">
<input type="text" id="output">
<input type="Submit" value="Update">
</form>   
  </body>
</html>

PHP:

<?php
$mail=$_POST["mail"];

$mysqli = mysqli_connect("url", "user", "password", "database_name");

mysqli_query($mysqli, "UPDATE modx_site_content SET pagetitle='$mail' WHERE longtitle='jee'");

echo "Updated!";

$mysqli->close();

【问题讨论】:

  • 你怎么知道它不起作用你没有收到警报?
  • 有人需要这样说:“新手警报”可以被编辑掉。你添加了cache: false——一个“新手”不会这样做——你甚至使用了 mysqli 而不是已弃用的mysql_* 系列函数! +1。

标签: php jquery ajax mysqli


【解决方案1】:

来自 jQuery 文档:

注意:将缓存设置为 false 仅适用于 HEAD 和 GET 请求

丑陋的修复:在查询字符串中附加一个随机参数:

$.ajax({  
            type: "POST",  
            url: "gettable.php",  
            data: "mail="+ mail + "&timestamp=" + new Date(),  // Will append the current date in milliseconds since January 1, 1970 (correct me if I'm wrong).
            cache: false,
            success: function(data){
                alert(mail);  
            }  
        });

【讨论】:

    【解决方案2】:

    尝试将ajax更改为帮助调试,我还向数据添加了一个对象并将同步设置为false以确保ajax在返回之前完成执行

    $(document).ready(function(){
      $('#paina').submit( function() {
         $.ajax({  
            type: "POST",  
            url: "gettable.php",  
            data: {mail: mail},  
            cache: false,
            async: false,
            success: function(data){
                alert(mail);  
            },
            error function(){
               alert("Failed");
    
            } 
         });
      });
    });
    

    您也不需要表单上的操作,因为 jQuery 正在处理它

    <form id="paina" name="test" action="" method="post">
    

    【讨论】:

    • 你也不需要方法。
    【解决方案3】:

    感谢您的提示。我找到了解决方案,MODX Revolution 使用 xPDO 数据库连接,所以我不得不将 PHP 代码更改为:

    $mail=$_POST["mail"];
    
    $dsn = 'mysql:host=localhost;dbname=databasename;port=3306;charset=utf-8';
    $xpdo = new xPDO($dsn,'user','password');
    $results = $xpdo->query("UPDATE modx_site_content SET pagetitle='$mail' WHERE longtitle='jee'");
    

    【讨论】:

      猜你喜欢
      • 2016-08-03
      • 2013-05-10
      • 2015-03-22
      • 1970-01-01
      • 1970-01-01
      • 2012-02-02
      • 2011-07-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多