【发布时间】:2013-05-27 18:33:46
【问题描述】:
这个 ajax 测试应该(按照现在大约 2 小时的意愿)将请求结果返回到 textarea。请求是针对同一页面发出的,我在正文顶部有一个 $_POST isset 测试,以检查请求是否来自我的 POST 请求(我需要将代码全部放在一个文件中)。结果是“出现在 textarea 框中的文本”是自己返回的,而不是放在 textarea 内。
//name of this page is testing.php
<html>
<head>
function loadXMLDoc()
{
var xmlhttp;
xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("testTextarea").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.open("POST","testing.php",true);
xmlhttp.send("test");
}
</head>
<?
if (isset($_POST["testName"])) {
die("text to appear in the textarea box");
}
?>
<body>
<form action="testing.php" method="POST" onsubmit="loadXMLDoc(this.form); return false;">
<input class="command" type="text" name="testName" />
<div><textarea id="testTextarea"></textarea></div>
</body>
</html>
【问题讨论】:
-
您很可能在
onsubmit="loadXMLDoc(this.form); return false;"和loadXMLDoc(this.form);中出现了javascript 错误。因此,return false不会被触发,并且表单会以常规方式提交。检查错误控制台以查看问题所在。乍一看,我会说this.form应该只是this,因为那已经是表格了。但函数本身也可能存在错误。 -
时间戳:31/05/2013 21:49:42 错误:InvalidStateError:尝试使用不可用或不再可用的对象源文件:localhost:8082/testing.php 行: 19
-
即使我删除了表单操作,结果还是一样
-
那是因为你不能在连接open()之前setRequestHeader()。表单只是提交,因为有一个 js 错误。表单根本不应该提交。
-
@curtis,我将其移至 Open 之后的行,并从表单中删除了 action 属性。仍然是相同的结果,所以它的 javascript 提交它,它仍然导致该