使用 jQuery AJAX 更新数据库只能使用一次
Posted
技术标签:
【中文标题】使用 jQuery AJAX 更新数据库只能使用一次【英文标题】:Updating database with jQuery AJAX works only one time 【发布时间】: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。
【参考方案1】:
来自 jQuery 文档:
注意:将缓存设置为 false 仅适用于 HEAD 和 GET 请求
丑陋的修复:在查询字符串中附加一个随机参数:
$.ajax(
type: "POST",
url: "gettable.php",
data: "mail="+ mail + "×tamp=" + 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'");
【讨论】:
以上是关于使用 jQuery AJAX 更新数据库只能使用一次的主要内容,如果未能解决你的问题,请参考以下文章
YUI.io (ajax) 和 Django - 更新只能工作一次,YUI 无法再次找到表单