【发布时间】:2014-04-21 06:52:30
【问题描述】:
我已经尝试了所有可以通过 Google 搜索的解决方案,但我无法从外部 PHP 文件中的 POST 数组中读取数据。这是文本字段的 HTML。
<form>
<textarea id="comment_text_area" name="comments" rows="5" cols="40">
</textarea>
<label for="comment_text_area">Comment:</label>
<br>
<input type="submit" name="submit" value="Submit" onclick="SaveComments()">
</form>
... 以及进行 AJAX 调用的 JS 函数
function save()
{
var data = document.getElementById("comment_text_area");
var xhr = (window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
xhr.open('POST', 'save_comments.php', true);
xhr.onreadystatechange = function()
{
if (xhr.readyState == 4 && xhr.status == 200)
{
alert("Comments saved!");
}
}
xhr.send(data);
}
... 和 PHP 文件
<?php
if(isset($_POST['comments']))
{
$data = htmlentities($_POST['comments']);
$file = "comments.txt";
file_put_contents($file, $data, FILE_APPEND | LOCK_EX);
}
else
{
$data = "empty";
$file = "comments.txt";
file_put_contents($file, $data, FILE_APPEND | LOCK_EX);
}
?>
我所知道的有效: AJAX 调用成功完成,脚本正在运行并且正在编写“空”。
我尝试过的事情:
我读到事件侦听器函数应在生成 HTML 元素之前附加到它们,这似乎违反直觉。没有做任何改变。
-
使用
xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
没用。而且,根据我为此所做的研究,这难道不应该只对 GET 调用有必要吗? (我需要使用 POST)
- 使 POST 调用同步。没有改变。
我知道您传递的元素的名称必须是您在 PHP 脚本中所依赖的名称,但它不起作用。我不想设置表单 action="" 因为我不想重定向,这就是我要通过 AJAX 的原因。 最后,我注意到,当我点击提交时,它会改变 URL,这是我对 GET 的期望。那是 GET 特定的,对吧?我清楚地将其标记为 POST。
有人看到我做错了吗?
附: - 请,如果它是在 JS 方面,请不要使用 jQuery。到目前为止,我一直在避免它,我正在努力保持这种状态。
【问题讨论】:
标签: javascript php html ajax post