php - Ajax 生成的表单在初始请求后不发送更新值

标签 php javascript html ajax

我知道有更实用的方法可以实现我在这里想要完成的任务,但如果可能的话,我需要坚持这个模型。

我正在尝试将多个 HTML 文本输入字段中的值发送到 Javascript 函数。 它在第一次提交时按预期工作。每次 Ajax 将表单重新加载到容器 div 后,它都会发送原始提交的值,而不是更新后的值。我该如何解决这个问题?

这是进行调用的位置:(drawNewEvent.php 的结果输出显示在 Div 标记内)

<? $cal = $_POST['cal']; ?>
<button type="button" onClick="newEvent(<? echo $cal['KEY']; ?>)">Add Event</button>

<div id="container">

<!--Form goes here-->

</div>

这是我正在使用的 Ajax 函数:

function newEvent(calID){
    var xmlhttp;
    if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    }
    else{// code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }


    xmlhttp.onreadystatechange=function(){
        if (xmlhttp.readyState==4 && xmlhttp.status==200){
            document.getElementById("container").innerHTML=xmlhttp.responseText;
        }
    }

    xmlhttp.open("POST","cal/draw/drawNewEvent.php",true);
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    xmlhttp.send("calID="+calID);
}

drawNewEvent.php:

<? $calID = $_POST['calID']; ?>
<h1> Add Event to <? echo $calID;?></h1>
<table border="1"><tr><td>
<br>
<table>
<tr>
<td>Event name:</td><td><input name="name" type="text" id="aname" size="32" maxlength="40" /></td>
</tr><tr>
<td>Date:</td><td><input name="date" type="text" id="date" maxlength="10" value="<?php echo date('Y-m-d'); ?>"/> (YYYY-MM-DD)</td>
</tr><tr>
<?php $hour = date('H'); $hour -= 4;?>
<td>Starting Time:</td><td><input name="sTime" type="text" id="sTime" maxlength="8" value="<?php echo $hour.date(':i'); ?>"/> (HH:MM)</td>
</tr><tr>
<td>Ending Time:</td><td><input name="eTime" type="text" id="eTime" maxlength="8" value="<?php echo ($hour+1).date(':i'); ?>"/> (HH:MM)</td>
</tr>
<tr>
<td>Location:</td><td><input name="location" type="text" id="alocation" size="32" /></td>
</tr>
<tr>
<td>Notes:</td><td><textarea name="notes" id="notes"  rows="10" cols="30"/></textarea></td>
</tr>
</table>
<button type="button" name="add" 
onClick="addEvent(aname.value, date.value, sTime.value, eTime.value, alocation.value, notes.value, <?php echo $calID ?>)">Add Event </button>
</td></tr></table>

调用的函数仅显示给定的输入:

function addEvent(name, date, sTime, eTime, location, notes, calID){
    alert("name: "+name + "\nDate: " + date + "\nTime: " + sTime + "-" + eTime + "\n Location: " + location + "\n Notes: " + notes + "\n CalID = " + calID);
}

最佳答案

嗯,您的 calID 始终相同(应该如此吗?)。您正在发送一个 URL 中具有相同参数的 ajax 请求,并且很可能第二次您会获得缓存的响应,因此第二个 ajax 请求永远不会通过服务器运行。我建议通过使用随机或变化的变量来避免缓存。例如:

var d = new Date();
var n = d.getTime();
xmlhttp.open("POST","cal/draw/drawNewEvent.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("calID="+calID+"&random="+n);

现在,浏览器会将您的 ajax 请求视为不同的请求,并且不会从缓存中返回。让我们从这里开始调试。您的脚本现在表现如何?

关于php - Ajax 生成的表单在初始请求后不发送更新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9997594/

相关文章:

php - 如何在 CentOS 上禁止 zip 文件?

php - 使用 Drupal 制作 1 页 xhtml-css 网站

javascript - 排除项目及其内容元素

javascript - 从 Javascript 写入 HTML 文件

php - 如何解决 `SameSite`属性

html - 960.gs 框架 + 带有奇数成员的页脚

php - MYSQL order by 如何为列使用其他名称?

php - 在特定 id 之后插入第二列到 csv

javascript - 之后添加带有css伪元素的onclick

javascript - 检查 JavaScript 函数中 Asp.Net Mvc 中模型的属性是否不为空