JQuery Ajax работает в Chrome, но не Firefox или IE - PullRequest
0 голосов
/ 31 октября 2011

Справедливое предупреждение: я не эксперт, но мне удалось зайти так далеко. Мой код не красивый и грубый. Это довольно сложная система, поэтому не стесняйтесь задавать вопросы.

Так что у меня есть досадная проблема, когда мой код работает в Chrome, но больше нигде. Кажется, что ни один из моих javascript не работает ни в Firefox, ни в IE. ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ, ЧТО КАЖДЫЙ РАЗ ВЫ ВИДИТЕ PHP ВНУТРИ РАЗДЕЛА, ЭТО ПРОСТО ПРЕДСТАВЛЯЕТ # ПОЧТЫ ВНУТРИ БАЗЫ ДАННЫХ.

Мой код отображает сообщения, в которых каждое сообщение соединено с кнопкой «Нравится» и «Не нравится», созданной с интервалами. Существует флажок, который показывает / скрывает все понравившиеся сообщения, и другой, который делает то же самое для непривязанных сообщений при выборе. Когда пользователю нравится или не нравится сообщение, нажав на кнопку, значения отправляются в мою БД через ajax (в 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>

Вот код для каждого сообщения, также находящегося в цикле, за которым следует #Message, которое появляется, когда 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 Ответ

1 голос
/ 31 октября 2011

Извините, я не потратил время на прочтение всего вашего поста, но обычно такого рода проблемы связаны с ошибкой JavaScript. Если у вас его нет, установите Firebug на Firefox и посмотрите в консоли Firebug, есть ли у вас какие-либо ошибки, также посмотрите, сделан ли вызов ajax и какой ответ вы получите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...