2

jQueryを使用してデータベースを更新しようとしています。この関数は問題なく機能しますが、1回だけです。データベースを再度更新する場合は、ページを更新してキャッシュをクリアする必要があります。私はMODXRevolutionを使用していますが、それがこの問題と関係があるかどうかはわかりません。コードは次のとおりです。

<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();
4

3 に答える 3

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);  
            }  
        });
于 2013-02-15T15:37:54.130 に答える
1

デバッグに役立つように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">
于 2013-02-15T15:38:03.823 に答える
0

ヒントをありがとう。私は解決策を見つけました。MODXRevolutionは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'");
于 2013-02-18T20:18:43.253 に答える