newNet.php
运行并正确创建新条目。 netID
变量是自动增量,因此它是自动创建的。我的目标是然后检索它并在showActivities()
函数中使用它来显示刚刚创建的记录。例如,它应该像这样解决; showActivities(55)
;
问题是SQL总是返回netID
的前一个值,54
而不是55
;如果我说echo $result + 1
;然后,根据页面源,它显示正在showActivities
函数中正在解析的正确数字,但该函数无法找到并返回数据。但是看着DB已成功插入。
一步一步:
newNet.php
运行,它向MySQL数据库添加记录netID
值
showActivities()
,并在页面上显示。{/ li>
醇>
我怎样才能得到我想要的东西?似乎数据库的更新速度不足以满足showActivities()
的请求,这可能吗?
function newNet(str) {
str = str;
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState === 4 && xmlhttp.status === 200) {
document.getElementById("status").innerHTML = xmlhttp.responseText;
}}
xmlhttp.open("POST", "newNet.php", true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("q="+str);
showActivities(<?php $stmt=$db_found->prepare("select max(netID) as netID from netLog limit 1");
$stmt->execute();
$result=$stmt->fetchColumn();
echo $result;
?>);
}
答案 0 :(得分:2)
这里有两个问题:
正如我在评论中所说,你的问题与AJAX的异步性质有关。该请求实际上需要时间来处理。但是您的代码会立即开始执行showActivities
,因此请求中不会返回任何结果,因为这仍然是&#34;烘焙&#34;。
您的PHP代码在页面加载时呈现。因此旧值将从数据库加载。在页面加载时,它将是54
。您可以触发该Ajax请求十次,netID仍然是54
,因为PHP是在服务器端而不是客户端运行。
如何解决这个问题:
你有一个xmlhttp.onreadystatechange
函数可以监听请求并在每次完成一个步骤时触发。这称为回调功能。在步骤4,披萨完成,200意味着它没有燃烧,实际上看起来很好。当状态像这样返回并且可以访问时。
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState === 4 && xmlhttp.status === 200) {
document.getElementById("status").innerHTML = xmlhttp.responseText;
//execute all relevant code that needs data from server from here.
showActivities(xmlhttp.responseText);
}}
在newNet.php
中,您应该执行现在位于showActivities()
的参数位的PHP代码。在脚本完成对数据库的插入后执行此操作。
$stmt=$db_found->prepare("select max(netID) as netID from netLog limit 1");
$stmt->execute();
$result=$stmt->fetchColumn();
echo json_encode($result);
您可以json_encode
结果。这样它就会以JSON格式打印到页面上。我们可以将此变量加载到JavaScript变量中。
function showActivities(data)
{
//remember data is a JSON string, time to convert it into JavaScript
var netID = JSON.parse(data);
alert(netID); //should show the highest netID
}
了解详情:
JSON
Asynchronous calls
用于披萨参考和更精细的方法here XMLHttpRequest
总结
- PHP总是在加载页面之前运行,如果不重新加载页面就无法再次运行。因为发明了
XMLHttpRequest
。XMLHttpRequest
需要一段时间才能完成,必须使用回调来处理其结果。