jQuery ajax适用于Chrome,但不适用于Firefox或IE

时间:2011-10-30 22:53:07

标签: php jquery ajax cross-browser

公平警告:我不是专家,但我确实设法做到这一点。我的代码不漂亮而且很粗糙。这是一个相当复杂的系统,所以不要羞于提问。

所以我有一个恼人的问题,我的代码在chrome中工作,但在其他地方。好像我的javascript都没有在Firefox或IE中运行。请注意,每次你看到PHP内部的一个DIV它简单地代表数据库中的帖子#。

我的代码会显示帖子,其中每个帖子都与使用跨度构建的喜欢和不喜欢按钮配对。有一个复选框显示/隐藏所有喜欢的帖子,另一个复选框在选择时对不喜欢的帖子执行相同操作。当用户通过单击按钮喜欢或不喜欢帖子时,会通过ajax(to check.php)将值发送到我的数据库,以便将来访问时可以调用它们。

同样,它在Chrome中运行良好,但在IE和Firefox中无效。

此外,除非我首先手动将值插入我的数据库中的userPosts表,否则我的数据库中不会保存新的帖子和值。例如,如果我的数据库已经有帖子1-3的值,那么用户喜欢/不喜欢这些帖子的所有未来决定都会被发送并保存没有问题但是如果我添加新帖子(post4)并且用户喜欢或不喜欢它,没有值被发送...似乎INSERT在check.php中不起作用,而UPDATE函数就好了。

这是位于循环内部的jQuery,你应该发现它符合你的注释:

<script type="text/javascript">
$(document).ready(function() {

// Declare variables
    var checked = <?php echo $row['value']; ?>; //get value of Liked or Disliked from database
    var postID = <?php echo $row['postID']; ?>; //get post ID from database
    var userID = <?php echo $current_user->ID; ?>; //get the wordpress user's ID
    var showLikes = $("input[name*='show_likes']"); //represents checkbox for Hide Liked
    var showDislikes = $("input[name*='show_dislikes']"); //represents checkbox for Hide Disliked

// Set the remembered Liked and Disliked buttons
    if (checked == 1) {
        $('#post_<?php echo $row['postID']; ?>').addClass('like'); 
        $('#like_<?php echo $row['postID']; ?>').removeClass('likeimgoff').addClass('likeimgon');
    } else if (checked == 0) {
        $('#post_<?php echo $row['postID']; ?>').addClass('dislike'); 
        $('#dislike_<?php echo $row['postID']; ?>').removeClass('dislikeimgoff').addClass('dislikeimgon');
    }

//When Liked button is clicked do this
$('#like_<?php echo $row['postID']; ?>').click(function() {
// Declare variables
    var value = '1';

// Send values to database
    $.ajax({
        url: 'check.php',
        type: 'POST',
        data: 'userID=' + userID + '&postID=' + postID + '&value=' + value,
        success: function(result) {
            $('#Message_<?php echo $row['postID']; ?>').html('').html(result).prependTo('#post_<?php echo $row['postID']; ?>');
        }
    });

// If post is Disliked, change to Liked
    $('#post_<?php echo $row['postID']; ?>').removeClass('dislike').addClass('like');
    $('#dislike_<?php echo $row['postID']; ?>').removeClass('dislikeimgon').addClass('dislikeimgoff');
    $('#like_<?php echo $row['postID']; ?>').removeClass('likeimgoff').addClass('likeimgon');
// If Hide Liked checkbox is on, toggle the post
    if (showLikes.attr('checked')) {
        $('#post_<?php echo $row['postID']; ?>').toggle();
    }

    return false;
});

//When Disliked button is clicked do this
$('#dislike_<?php echo $row['postID']; ?>').click(function() {
// Declare variables
    var value = '0';
// Send values to database
    $.ajax({
        url: 'check.php',
        type: 'POST',
        data: 'userID=' + userID + '&postID=' + postID + '&value=' + value,
        success: function(result) {
            $('#Message_<?php echo $row['postID']; ?>').html('').html(result).prependTo('#post_<?php echo $row['postID']; ?>');
        }
    });

// If post is Liked, change to Disliked
    $('#post_<?php echo $row['postID']; ?>').removeClass('like').addClass('dislike');
    $('#like_<?php echo $row['postID']; ?>').removeClass('likeimgon').addClass('likeimgoff');
    $('#dislike_<?php echo $row['postID']; ?>').removeClass('dislikeimgoff').addClass('dislikeimgon');
// If Hide Disliked checkbox is on, toggle the post
    if (showDislikes.attr('checked')) {
        $('#post_<?php echo $row['postID']; ?>').toggle();
    }

    return false;
});

//When Hide Liked checkbox clicked, toggle all Liked posts.
    $("input[name*='show_likes']").click(function() {
        if ($('#post_<?php echo $row['postID']; ?>').is('.like')) {
            $('#post_<?php echo $row['postID']; ?>').toggle();
        }
    });

//When Hide Disliked checkbox clicked, toggle all Disliked posts.
    $("input[name*='show_dislikes']").click(function() {
        if ($('#post_<?php echo $row['postID']; ?>').is('.dislike')) {
            $('#post_<?php echo $row['postID']; ?>').toggle();
        }
    });

});
</script>

这是每个帖子的代码,也是坐在循环中,然后是#jessage,当ajax返回check.php的输出并最终关闭循环时出现:

<div id="post_<?php echo $row['postID']; ?>" class="post">
<div id="post_<?php echo $row['postID']; ?>_inside" class="inside">
    <div id="like">
        <a id="like_<?php echo $row['postID']; ?>" class="likeimgoff" href="#"><span></span></a>
    </div>
    <div id="dislike">
        <a id="dislike_<?php echo $row['postID']; ?>" class="dislikeimgoff" href="#"><span></span></a>
    </div>
    <b><?php echo $row['Title']; ?></b><br>
    <?php echo $row['Description']; ?><br>
</div>
</div>
<div id="Message_<?php echo $row['postID']; ?>" class="reminder"></div>

<?php 
} 
?>

</div>

这是check.php:

<?php
mysql_connect("name.database.com", "username", "password") or die(mysql_error());
mysql_select_db("databasename") or die(mysql_error());

if (isset($_POST['userID'])){
$userID = mysql_real_escape_string($_POST['userID']);   
}else{
echo "No userID";
}

if (isset($_POST['postID'])){
$postID = mysql_real_escape_string($_POST['postID']);   
}else{
echo "No postID";
}

if (isset($_POST['value'])){
$value = mysql_real_escape_string($_POST['value']);   
}else{
echo "No value";
}

$query = mysql_query("SELECT * FROM userPosts WHERE userID='$userID' AND postID='$postID';") or die(mysql_error()); 

if (mysql_num_rows($query) > 0) { 
mysql_query("UPDATE userPosts SET value='$value' WHERE userID='$userID' AND postID='$postID';") or die(mysql_error());
} else {
mysql_query("INSERT INTO userPosts (userID, postID, value) VALUES ('$userID', '$postID', '$value') ") or die(mysql_error()); 
} 

echo "UserID: " .$userID. " PostID: " .$postID. " Value: " .$value;
?>

所以你有它。我知道这是很多代码,所以请不要回避并随意提问!

1 个答案:

答案 0 :(得分:1)

抱歉,我没有花时间阅读你的整个帖子,但通常这类问题都是javascript错误。如果您没有它,请在Firefox上安装Firebug并在firebug控制台中查看是否有任何错误,同时查看是否进行了ajax调用以及获得了什么答案。