【问题标题】:Ajax returns the request result to the whole screen rather than the designated textareaAjax 将请求结果返回到整个屏幕而不是指定的文本区域
【发布时间】: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 提交它,它仍然导致该

标签: php ajax


【解决方案1】:

尝试将 die() 移到顶部,以便在 die() 之前不输出任何其他内容

<?
if (isset($_POST["testName"])) {
die("text to appear in the textarea box");
}
?>

<html>
<head>
<script>
function loadXMLDoc()
{
var xmlhttp;

xmlhttp=new XMLHttpRequest();

xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("testTextarea").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("POST","testing.php",true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send("testName=blah");
}
</script>

</head>

<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>
</form>

</body>
</html>

【讨论】:

  • 好吧 $_POST["testName"] 没有设置,因为你只发送“测试”。你需要做 xmlhttp.send("testName=blah");
  • 对我有用,我知道你遇到了什么 js 错误导致表单提交,导致页面刷新。我认为最好根本没有表单,您可以在没有表单的情况下输入输入,然后单击提交按钮时调用 ajax。该表单使调试变得更加困难,因为它在出现 js 错误时提交,然后在 onsubmit 中返回 false。
  • 真的吗?该死的..那么我上面的内容对你有用吗?可以私信我吗?顺便说一句,表单提交时只有输入按钮,没有点击按钮
  • 谢谢,不知道这对我怎么不起作用.. 一定有原因,但已经花了太长时间试图弄清楚
猜你喜欢
  • 2015-09-21
  • 1970-01-01
  • 1970-01-01
  • 2018-09-25
  • 2020-06-29
  • 2015-10-05
  • 2013-11-08
  • 2020-11-12
  • 2018-04-21
相关资源
最近更新 更多