我真的很想做什么。我的问题是PHP变量(或javascript / jQuery)没有通过我创建的AJAX请求发送到另一个php文件。好的,我正在创建一个聊天应用程序。它有一个消息文本框和一个发送按钮。当单击发送按钮时,ajax请求工作,它执行我想要的php文件(我知道这是因为它写了一个“:”到我的文本文件,这是正确的),除了我得到:“undefined index:message“,因为消息变量没有被发送到php文件!我在这个主题上发现了很多问题,但是它们似乎都没有帮助我,所以我希望你们能够弄明白。
这是我的test.php文件:
<!doctype html>
<html>
<head>
<script src="jquery.min.js"></script>
<script>
$(document).ready(function(){
$("#chat").load("chat.txt");
});
</script>
<script>
$(document).ready(function(){
$("#send").click(function(){
$.ajax({
type: 'post',
url: 'chat.php',
data: '' + message,
success: function(response){
$("#chat").html(response);
}
});
});
});
</script>
</head>
<body>
<?php
if (isset($_POST['send'])) {
$message = $_POST['message'];
}
?>
<style type="text/css">
#chat {
width: 194px;
background-color: #292929;
color: #493C9E;
overflow: scroll;
}
</style>
<pre id="chat">
</pre>
<form method="post">
Message: <input type="text" id="message" name="message"><br>
<input type="submit" value="Send" id="send" name="send" onclick="return false;">
</form>
</body>
</html>
我已经尝试了我能想到的一切,但没有任何工作!我尝试使用JavaScript和jQuery创建消息变量,我试图插入php标签并在数据旁边创建一个php变量。我尝试过没有空字符串。我尝试过的其他一些代码是data: { message: '123' }
。此外,当我创建一个jQuery / JavaScript变量时,我提醒了消息的值,这正是我在消息文本框中输入的内容。
chat.php:
<?php
$file = "chat.txt";
$handle = fopen($file, "a+");
fwrite($handle, ": " . $message . "\n");
echo "\n: " . $message;
?>
我已尝试在chat.php文件中包含test.php文件,但无济于事。我还创建了消息变量$message = $_POST['message'];
,并且消息数据应该从test.php文件发送。我已经尝试检查消息变量是否已设置(使用isset()
)。在test.php文件中,我也尝试通过AJAX { message: $message },
创建消息变量。并且似乎没有工作!!!!这真的让我感动,所以如果有人能帮助我,我真的很感激。
Thanx ALOT提前:)
PS:如果您需要任何其他信息,请在下面评论,我会给您。感谢大家在之前的问题中做出如此快速的回应:)
答案 0 :(得分:1)
我发现的问题很少:
将您的isset()
移至chat.php,而不是test.php中。如果您有$.ajax()
,那么为什么需要isset()
,但在chat.php中使用它作为抓取和处理$_POST[]
的一部分。
您缺少var
,而您的ajax不知道要发送哪个字符串。
将所有jquery片段汇总到一个代码中,而不是包含2个$(document).ready(function()
我总是把我的jQuery放在html的底部(在</body>
之前而不是在<head>
之内。
根据我的反馈,下面的内容将按照我的编码方法显示:
test.php的
<!doctype html>
<html>
<head>
<style type="text/css">
#chat {
width: 194px;
background-color: #292929;
color: #493C9E;
overflow: scroll;
}
</style>
<script src="jquery.min.js"></script>
</head>
<body>
<pre id="chat">
</pre>
<form id="chatForm" method="post">
Message: <input type="text" id="message" name="message"><br>
<input type="submit" value="Send" id="send" name="send" onclick="return false;">
</form>
<script type="text/javascript">
/* notice I moved the jQuery script to bottom right before </html> instead of inside <head> */
/* combine both of 2 jQuery into same grouping */
$(document).ready(function(){
$("#chat").load("chat.txt");
/* use form id for ajax to manipulate the data so, I added id="chatForm" in your html form for this one: */
$("#chatForm").submit(function(){ /* <-- use `submit()` so it'd handle the whole form at once */
var message = $( this ).serialize(); /* <-- this inkove ajax to know to expect string before sending to php */
$.ajax({
type: 'post',
url: 'chat.php',
data: ''+ message,
success: function(response){
$("#chat").html(response);
} // end of success
}); // end of $.ajax()
}); // end of submit
});// end of document ready
</script>
</body>
</html>
和你的chat.php
<?php
/* transfer isset() from test.php to this file and use it to wrap your fwrite function */
if (isset($_POST['message'])) {
$message = $_POST['message'];
$file = "chat.txt";
$handle = fopen($file, "a+");
fwrite($handle, ": " . $message . "\n");
echo "\n: " . $message;
}
?>
答案 1 :(得分:0)
向ajax调用添加错误函数并查看返回的内容。
error: function(msg){alert(msg.status + " " + msg.statusText);}
答案 2 :(得分:0)
您必须在$_POST
中使用chat.php
变量
像这样:
<?php
$file = "chat.txt";
$handle = fopen($file, "a+");
fwrite($handle, ": " . $_POST['message'] . "\n");
echo "\n: " . $_POST['message'];
?>