0

我的网站上有一个列表,其中有一个与列表中的每个项目相关联的收藏按钮。我使用图像作为单击按钮。它的PHP是:

echo "<img src=\"./images/emptystar.png\" alt=\"favorite\" class=\"favoritebutton\" billid=\"" . $count['id'] ."\" userid=\"". $_SESSION['userid'] ."\" />\n";

我有 javascript/jQuery 来使该图像的 onclick 向 PHP 文件提交 AJAX 请求。

$(document).ready(function() {

$(".favoritebutton").click(function () {

var billid = $(this).attr("billid");
var userid = $(this).attr("userid");
var ajaxrequest;
var params = "billid=" + billid + "&userid=" + userid;

ajaxrequest.open("POST","./ajaxphp/favorites.php",true);

ajaxrequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
ajaxrequest.setRequestHeader("Content-length", params.length);
ajaxrequest.setRequestHeader("Connection", "close");

ajaxrequest.send(params);

ajaxrequest.onreadystatechange=function()
    {
    if (ajaxrequest.readyState===4 && ajaxrequest.status===200)
        {
        if(ajaxrequest.responseText === "true")
            {
            if($(this).attr("src") === "./images/emptystar.png")
                {
                $(this).attr("src","./images/fullstar.png");
                }
            else
                {
                $(this).attr("src","./images/emptystar.png");
                }
            }
        }
    };

});

});

./ajaxphp/favorites.php 中的 php 文件如下:

<?php
include("./includes/dbcxnfunction.inc");

$billid = $_POST['billid'];
$userid = $_POST['userid'];

$query = "IF NOT EXISTS (SELECT * FROM favoritebills WHERE userid = '$userid' AND billid = '$billid' ) 
              INSERT INTO favoritebills (userid,billid) VALUES($userid,$billid)

          ELSE
              DELETE FROM favoritebills WHERE userid = '$userid' and billid = '$billid' ";

$result = mysqli_query(dbcxn('bill'),$query)
              or exit("Couldn't execute query for favorites");

if($result)
    {
    $request = "true";
    }
else 
    {
        $request = "false";
    }

echo $request;

?>

我特别关心 SQL 查询和 javascript,因为我不确定它们的正确性,但我使用了带有 JQuery 的 javascript 验证器,一切都是有效的。

当我单击页面上的图像时,即使我已经测试了图像更改的两种条件,也没有任何反应。要么 javascript 编写不正确,要么没有从 favorites.php 文件发回的响应。

控制台中的网络选项卡。

在此处输入图像描述

4

1 回答 1

0

在进行 ajax 调用之前,使用 JQuery 的 .ajax 并通过将单击的元素存储在 var 中来传递它

$(".favoritebutton").click(function () {

  //Store $(this) in var so that it can be passed inside the success function
  var this$ = $(this);

  var billid = this$.attr("billid");
  var userid = this$.attr("userid");


  $.ajax( { url : "./ajaxphp/favorites.php", type: 'post', data : { billid : billid , userid : userid }, 
    success : function( responseText ){

        if( responseText == "true"){

            if( this$.attr("src") == "./images/emptystar.png"){
                this$.attr("src","./images/fullstar.png");
            }else{
                this$.attr("src","./images/emptystar.png");
            }

         }

    },
    error : function( e ){

        alert( ' Error : ' + e );

    }
  });

});
于 2013-07-24T08:20:05.893 回答