Я пытаюсь отобразить 2 суммы, рассчитанные в функции php с помощью события наведения мыши с Ajax. Как мне это сделать? - PullRequest
1 голос
/ 01 декабря 2010

Это для школьного проекта.Это то, что у меня так далеко.Я совершенно новичок в этом и совершенно потерян.Был бы признателен за помощь.

Ajaxfunctions.js

function getXMLHttp()
{
  var xmlHttp

  try
  {
    //Firefox, Opera 8.0+, Safari
    xmlHttp = new XMLHttpRequest();
  }
  catch(e)
  {
    //Internet Explorer
    try
    {
      xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch(e)
    {
        try
            {
                xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
        catch(e)
            {
                alert("Your browser does not support AJAX!")
                return false;
            }
        }
    }
    return xmlHttp;
}


 function MakeRequest(product)
{
  var xmlHttp = getXMLHttp();

  xmlHttp.onreadystatechange = function()
  {
    if(xmlHttp.readyState == 4){
        if(xmlHttp.status == 200){
      HandleResponse(xmlHttp.responseText);
    }
    }   
  }

  xmlHttp.open("GET", "prodTotal.php?product=+_product", true);
  xmlHttp.send(null);
}

function HandleResponse(response)
{
  document.getElementById('totalqty').innerHTML = response;
  document.getElementByID('totaldol').innerHTML = response;
}

Это класс PHP с функцией PRODTOTAL и событиями наведения мыши в таблице.

<?php 

Class CarsClass {
        private $user = 'php06'; 
        private $pwd = 'php06';  
        private $dbConn;

function __construct($db='classicmodels') {
        //Create connection to MySQL database requested, if blank just connect up.

        $this->dbConn = new mysqli('localhost', $this->user, $this->pwd, $db);
        if (mysqli_connect_errno()) {
            echo 'Error: Could not connect to database.  Please try again later.';
            exit;
         }
        $query = "select count(*) as 'custcount' from customers";

        $result = $this->dbConn->query($query);
        $row = $result->fetch_assoc();
        $custCount = $row['custcount'];

        print "Connected to DB $db as user $this->user<br><br> Number of Rows $custCount<br><br>";
    }

function __destruct(){
        mysqli_close();
        Print "DB closed by user <br><br>";
    }

function header(){
    echo "Midterm Exam Script 2 Header<br><br>";
    }

function display(){
    $totqty = 0;
    $totamt = 0;
    //get row from WB_Resident Table
    $query = "select productCode,productName,productDescription,quantityInStock,buyPrice,MSRP from products";
    $result = $this->dbConn->query($query);
?>  

<table id="midterm2">

    <tr>
       <th colspan="13">Product Database Table</th>
    </tr>
    <tr> 
       <th width="2%">product Code</th>
       <th width="10%">product Name</th>
       <th width="10%">product Description</th>
       <th width="10%">quantity in stock</th>
       <th width="10%">buy Price</th>
       <th width="2%">MSRP</th>
       <th width="10%">Total Quantity</th>
    </tr>   
    <tr> 
    <th></th> 
    <th></th>
    <th></th>
    <th></th>
    <th></th>
    <th></th>
    <th width="10%">Total Dollars</th>

    </tr>

    <?php 
     while($row = $result->fetch_assoc()):
     $producta = $row["productCode"];
     //list($totqty, $totamt) = $this->ProdTotal($producta); 

    ?>
    <tr>
      <td>
         <?php echo $row["productCode"]; ?>
         &nbsp;
      </td>
      <td>
        <?php echo $row["productName"];?>
        &nbsp;
        </td>
      <td>
         <?php echo $row["productDescription"]; ?>
         &nbsp;
      </td>
      <td>
         <?php echo $row["quantityInStock"]; ?>
         &nbsp;
      </td>
      <td>
         <?php echo $row["buyPrice"]; ?>
         &nbsp;
      </td>
      <td>
         <?php echo $row["MSRP"]; ?>
         &nbsp;
      </td>
      <td>
      <div id ="totalqty" onmouseover="MakeRequest($producta)"></div>
      &nbsp; 
      <div id ="totaldol" onmouseover="MakeRequest($producta)"></div>  
      &nbsp;  
      </td>       
      </tr>

      <?php 
      endwhile;
      ?>
      </table>
    <?php   
  }

function footer(){
    echo "Midterm Exam Script 3 Footer<br><br>";
    }

function ProdTotal($product){

     $query = "select RTRIM(productCode) as productt, quantityOrdered, priceEach from orderdetails order by productt";

        $result = $this->dbConn->query($query);

        while($row = $result->fetch_assoc()){
        if ($row["productt"] == $product){
        $total = $row["quantityOrdered"] * $row["priceEach"];   
        $totqty = $totqty + $row["quantityOrdered"];
        $totamt = $totamt + $total;
        }
        }
        return array($totqty, $totamt);
        }


        }    
    ?>

Это вызывает класс.

<html>
<head>
<title>Midterm2 Script 4</title>
<link rel="stylesheet" type="text/css" href="midterm2.css" />
<script src="ajax_functions.js" type="text/javascript"></script>
</head>

<body>

<?php 
require 'CarsClass4.php';

$obj1= new CarsClass('classicmodels');

$obj1->header();
$obj1->display();
$obj1->footer();

?>

</body>
</html>

1 Ответ

1 голос
/ 01 декабря 2010

Правильно, у вас есть несколько мелких ошибок и отсутствует файл.

Я собираюсь ответить вам здесь на ваш оригинальный вопрос, постарайтесь не публиковать дубликаты - если ваш вопрос не получил ответа, естьнаверное причина.В этом случае из-за того, что это было очень долго, ответчикам, как правило, нравится, когда вы выясняете, в чем проблема, вместо того, чтобы разбираться в коде.Другая важная проблема заключается в том, что это, очевидно, среднесрочный период, и большинству людей не нравится отвечать на домашние вопросы, поскольку это побеждает объект, которым вы их делаете, если вы не сформулируете вопрос в стиле предложения.Во всяком случае, это ваш первый вопрос здесь, и я не хочу вас откладывать, так что конец разглагольствования.


Правильно, во-первых, в вашем файле Javascript Ajaxfunctions.js, ваша функция MakeRequest(product) имеетошибка в этом.Эта строка:

xmlHttp.open("GET", "prodTotal.php?product=+_product", true);

Должно быть:

xmlHttp.open("GET", "prodTotal.php?product=" + product, true);

Вам необходимо передать переменную обратно в сценарий PHP, прежде чем передать "_product" какидентификатор продукта, а не указанная переменная.

Тогда в вашем основном файле CarsClass.php вы увидите ту же ошибку на другом языке, передавая строку, а не фактическую переменную в методе display().Найдите строки с привязками onmouseover.

<td>
    <div id ="totalqty" onmouseover="MakeRequest($producta)"></div>
    &nbsp; 
    <div id ="totaldol" onmouseover="MakeRequest($producta)"></div>  
    &nbsp;  
</td>

$producta здесь отправляется как текст "$ producta", вам нужна переменная, и вы не находитесь в режиме PHP, поэтому вы не можетепросто упомяните об этом, вам нужно вывести его из PHP, как это было сделано в предыдущих ячейках таблицы.

<td>
    <div id ="totalqty" onmouseover="MakeRequest(<?php echo $producta; ?>)"></div>
    &nbsp; 
    <div id ="totaldol" onmouseover="MakeRequest(<?php echo $producta; ?>)"></div>  
</td>

Последнее, что вам нужно, это фактический файл запроса AJAX prodTotal.php (если этоимя последнего файла, который вы указали в своем вопросе, тогда следует использовать несколько иной подход).

prodTotal.php

<html>
<head>
    <title>Midterm2 AJAX Response File</title>
</head>
<body>

<?php 
require 'CarsClass4.php';

$product = (isset($_GET['product']) ? trim($_GET['product']) : '');

if (!empty($product)) {
    $classicModels = new CarsClass('classicmodels');

    list ($totqty, $totamt) = $classicModels->ProdTotal($product);
?>
    <div id ="totalqty"><?php echo $totqty; ?></div>
    <div id ="totaldol"><?php echo $totamt; ?></div>
<?php
}
?>

</body>
</html>

AJAX-запрос долженвыйдите и получите значения, посмотрите, как PHP-файл смотрит на запрошенное значение, вызывает функцию для его вычисления и выводит DIV, соответствующие идентификаторам, которые ищет ваш код в подпрограмме Javascript HandleResponse(), содержащие значения.Эта подпрограмма JS извлекает содержимое .innerHTML и заменяет его элементами.

Обратите внимание, что подпрограммы AJAX требуют времени, поэтому наведение курсора не будет мгновенным.В вашем коде может быть больше ошибок в другом месте, но это самая сложная часть.

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