我已经使用jQuery和AJAX几周了,我看到了两种不同的方法来在调用完成后"继续"脚本:success:
和.done
.
从jQuery文档的概要我们得到:
.done():说明:添加要在解析Deferred对象时调用的处理程序.
success:(.ajax()option):请求成功时调用的函数.
因此,在AJAX调用完成/解决之后,两者都做了一些事情.我可以随机使用其中一个吗?有什么区别,什么时候使用而不是另一个?
我正在尝试在我的网站中实现用户声誉系统.因此,您可以在每次交互时查看用户名后面的代表编号(例如,每次他发表评论时).还有一个投票系统也改变了用户的声誉,我希望代表号反映这一变化.所以我通过ajax调用一个文件,该文件返回该用户的新代表号.html/php文件是第一个实例(如果他发帖):
echo '<div class="rep_user_id" id="rep_user_id_'.$posts_row['userid'].'"> '.$posts_row['user_rep'].'</div>';
Run Code Online (Sandbox Code Playgroud)
然后(如果他发表评论):
echo '<div class="rep_user_id" id="rep_user_id_'.$com_row['userid'].'">'.$com_row['user_rep'].'</div>';
Run Code Online (Sandbox Code Playgroud)
都给我这个:
<div class="rep_user_id" id="rep_user_id_110">293</div>
Run Code Online (Sandbox Code Playgroud)
那么js:
function change_reps() {
var userid = $('.rep_user_id').attr('id').replace('rep_user_id_','');
$.ajax({
url: "vote/get_reputation.php",
data: "userid="+userid,
success: function(server_response){
$("body").ajaxComplete(function(event, request){
var reputation = server_response;
$('#rep_user_id_'+userid).replaceWith(''+reputation);
$('#rep_user_id_'+userid).effect("highlight", {color:'red'}, 1000);
}); } }); }
Run Code Online (Sandbox Code Playgroud)
在另一个ajax成功后调用此函数(更新rep和votes).因此,从中可以看出:当我向上或向下点击任何箭头时,我可以看到投票计数器向上或向下,但我只看到用户代表只改变了第一个实例(post).为什么它只改变一次而不是整个文件?有什么可以做的,从另一个文件(带有包含)调用评论部分?仅供参考,效果适用于所有情况!希望你能帮忙.谢谢
编辑:因为我已经看到我没有很好地解释自己,我正在添加更多的行.问题是我不能一次修改具有相同id和类的多个元素(而不是多次更改一个元素).所以我在整个页面中有293次,但发布的代码只改变了一个元素!这是触发change_reps()的原因:
$("body").on("click", ".vote_com_up", function(){
var com_id = $(this).attr('id').replace('vote_com_up_','');
$.ajax({
url: "vote/comment_vote.php",
data: "com_action=2&com_id="+com_id,
success: function(server_response){
$(".vote_com_number").ajaxComplete(function(event, request){
if(server_response == 'voted')
{ alert("Ya has votado en este post!");}
else{
var new_com_votes = server_response;
$("#vote_com_number_"+com_id).html(+new_com_votes);
} …
Run Code Online (Sandbox Code Playgroud) 我正在为朋友(http://pasionesargentas.com/sm/)建立一个网站,其中包含带有缩略图翻转的全屏画廊(http://tympanus.net/codrops/2011/02/09/fullscreen-gallery-with- thumbnail-flip /).我不太喜欢翻盖的想法所以我只是喜欢禁用它并添加一个菜单.菜单div css就像
#top {
position:fixed;
background: transparent;
display: block;
z-index: 99999;
}
Run Code Online (Sandbox Code Playgroud)
它适用于Chrome,Safari,Explorer和Opera.但出于某种原因,她无法在iPad上看到菜单.因为我没有ipad,所以我下载了Ripple Mission Control并且工作正常,所以我不知道发生了什么.
现在,问题是:我必须为平板电脑浏览器(iPad)做不同的CSS吗?或者是画廊弄乱菜单并覆盖它?
我只是想知道是否有一种方法可以只调用一次数据库来完成此过程。我基本上需要计算数据库中今天日期早于字段“date_out”+ 7 天的条目。我在想:
$today = date("Y-m-d"); //this is the format of date_out in my db!
$count_query = "SELECT count(*) FROM `group` WHERE ADDDATE('date_out', INTERVAL 7 DAY) <= $today ";
$count_result = mysql_query($count_query) or trigger_error("SQL", E_USER_ERROR);
$query_data = mysql_fetch_row($count_result);
$number_ty = $query_data[0];
if ($number_ty >= 1) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
对于此代码,$number_ty 始终为 0。如前所述,此问题的目标是了解是否可以仅通过一次 mysql 调用(而不是两次)来完成计数。我的目标只是简单、干净和懒惰:-)
谢谢!
我开始进入数组并且不能让它运行良好.我习惯使用explode/implode函数,但是我在这部分代码中使用数组会让我的生活变得更轻松.这是一个叫做的函数:
function save_event($event_items = NULL) {
include 'connect.php';
$now = date("Y-m-d H:i:s");
$sqla = "
INSERT INTO `event`(`event_items`, `event_entered`)
VALUES ('$event_items','$now')";
$resulta = mysqli_query($link, $sqla);
if(!$resulta)
{
echo '<br/>An error occurred while inserting your data. Please try again later.<br/>';
}
else
{ echo 'this is the variable to be stored:<br/>';
print_r($event_items);
$sql = "SELECT * FROM `event` WHERE event_entered = '".$now."'";
$result = mysqli_query($link, $sql);
if($result)
{ while($row = mysqli_fetch_assoc($result))
{ echo '<br/></br>This is the value of the database:<br/>';
print_r …
Run Code Online (Sandbox Code Playgroud) 我正在尝试一个更安全的页面,我开始使用密码加密部分.我正在尝试实现password_hash +密码验证,但到目前为止,我还没有成功完成整个工作.所以,这是在我的登录区域:
$username = mysqli_real_escape_string($connection, $_POST['username']);
$password = mysqli_real_escape_string($connection, $_POST['password']);
$query = "SELECT username, password FROM `users` WHERE username='$username' and user_enabled='1'";
$result = mysqli_query($connection, $query) or die(mysqli_error($connection));
if($row = mysqli_fetch_assoc($result)) { $dbpassword = $row['password']; }
if(password_verify($password, $dbpassword)) {
echo "Successful login";
}else{
echo "Invalid Login Credentials.";
}
Run Code Online (Sandbox Code Playgroud)
我总是获得无效的登录凭据.
当我修改用户的新密码时,我正在执行以下操作:
$pass = mysqli_real_escape_string($connection, $_POST['password']);
$options = [ 'cost' => 10,
'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM),
];
$password = password_hash($pass, PASSWORD_BCRYPT, $options)."\n";
$query = "UPDATE users
SET `password` = '".$password."'
WHERE id = …
Run Code Online (Sandbox Code Playgroud)