gpt4 book ai didi

php - 为什么这个 Ajax 需要这么长时间来呈现?

转载 作者:行者123 更新时间:2023-11-29 02:03:43 25 4
gpt4 key购买 nike

我的页面主要包含由 Ajax 生成的动态内容。它每 30 秒随机一次,并出现来自数据库的新内容。 PHP 看起来不错,但是我的 Javascript 代码似乎有问题,或者数据库有问题导致它滞后(Ajax 大约需要 30 秒加载!)

我的 Javascript 中对 setInterval 的递归调用似乎在 之前等待分配的毫秒数strong> 执行该函数,但我在我的 Javascript 中找不到任何错误。

另外,从数据库中检索到两个图像 url 字符串,Ajax 似乎有可能在它有从外部来源检索信息。

或者我对 PHP-MySQL 语法 ORDER BY rand() 的使用可能有滞后?

这里是相关的html:

    <html>
<head>
<title></title>
<script type = "text/javascript" src = "randomProducts.js" />
<script type = "text/javascript">
setIntervalOnload();
</script>
</head>
<body>
...
...
...
</body>
</html>

这是相关的Javascript:

    // global static variables
var subCategory; // initialized from setCategoryTree
var t; // for setInterval and clearInterval

var seconds;
var millisecondsPerSecond;
var milliseconds;

function setIntervalOnload()
{
getRandomProducts();
if(typeof t != "undefined")
clearInterval(t);

seconds = 30;
millisecondsPerSecond = 1000;
milliseconds = seconds * millisecondsPerSecond;

t = setInterval(getRandomProducts, milliseconds);
}

function getRandomProducts()
{
//window.alert(subCategory);
if(typeof subCategory == "undefined")
subCategory = "all";
else
{
clearInterval(t);
t = setInterval(getRandomProducts, milliseconds);
}

var req = new XMLHttpRequest();

var products = document.getElementById("products");

req.onreadystatechange = function()
{
if( (req.readyState == 4) && (req.status == 200) )
{
var result = req.responseText;
products.innerHTML = result;
}
};
req.open("GET", "randomProducts.php?category=" + subCategory, true);
req.send(null);
}
function setCategoryTree(link)
{
var categoryTree = document.getElementById("categoryTree");

/* climbing the DOM-tree to get the category name (innerHTML of highest "a" tag) */
var category = link.parentNode.parentNode.parentNode.getElementsByTagName("a")[0].innerHTML;

subCategory = link.innerHTML;

categoryTree.innerHTML = "==>&nbsp;" + category + "&nbsp;&nbsp;==>&nbsp;" + subCategory;

getRandomProducts();
}

...这是相关的 PHP:

<?php

// connect to MySQL
$dbName = "blah";
$db = mysql_connect("localhost", $dbName, "asdf");
if (!$db)
{
echo "<p>Error - Could not connect to MySQL</p>";
exit;
}

// select the blah database
$blah = mysql_select_db("blah");
if(!$blah)
{
echo "<p>Error - Could not select the blah database.</p>";
exit;
}

// fix html characters in $subCategory
$subCategory = $_GET["category"];
trim($subCategory);
$subCategory = stripslashes($subCategory);
$subCategoryFixed = htmlspecialchars($subCategory);

// for loop for each random product (total of 10 random products)
for($i = 0; $i < 10; $i++)
{
// query the blah database for all products
if($subCategoryFixed == "all")
{
$query = "SELECT * FROM products ORDER BY rand();";
$result = mysql_query($query);
}
else // query the blah database for products in selected subCategory
{
$query = "SELECT * FROM products WHERE cat = " . $subCategoryFixed . " ORDER BY rand();";
$result = mysql_query($query);
}
if (!$result)
{
echo "<p>Error - the query could not be executed</p><br />";
$error = mysql_error();
echo "<p>" . $error . "</p>";
exit;
}

$row = mysql_fetch_array($result);
$productValues = array_values($row);

$name = htmlspecialchars($productValues[3]);
$price = htmlspecialchars($productValues[5]);
$img = htmlspecialchars($productValues[7]);

// product info is formatted for home.html here
$str = '<div>
<a href = "' . $link . '" title = "' . $name . '">
<table id = "product-table" onmouseover = "darkenProduct(this);" onmouseout = "lightenProduct(this);">
<tr>
<td>' . $name .'</td>
</tr>
<tr>
<td><img src = "' . $img . '" /></td>
</tr>
<tr>
<td>' . $price . '</td>
</tr>
</table>
</a>
</div>';
echo $str;
} // end of products for loop
?>

最佳答案

您没有在 onload 方法中运行您的代码。 AJAX 设置代码的运行速度可能比页面加载速度快,因此 var products = ... 为空。您需要执行以下操作:

<body onload='setIntervalOnload();'>

 window.onload = setIntervalOnload;

关于php - 为什么这个 Ajax 需要这么长时间来呈现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10201783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com