我知道这个问题已被问到很多,因为我从早上开始使用Google搜索,但我无法想象我的代码中发生了什么。
我有一个index.php(这是我的网站),它使用表单从用户接收信息,然后单独调用一个javascript文件,然后调用另一个后端php文件(这个后端php文件使用mysql查询数据库,并且一些东西)。
问题是我不确定从我的js传递给后端php的信息是什么。我刚刚学习了jQuery和Ajax,所以我真的不知道我犯的那个小错误是什么。
根据我的理解,后端php执行其功能并将值传递给javascript以显示在网页上。但我的数据没有被发送/显示。我收到错误500内部服务器错误。
以下是目前存在问题的代码:
使用Javascript:
var data1 = {week:week, group:grp_name};
$.ajax({
dataType: "json",
type: "POST",
url : "php/remindUsers.php",
success : function(response){
alert ("success !");
},
error : function(response){
console.log(response);
alert("fail!");
}
})
});
PHP后端(remindUsers.php):
<?php
if (isset($_POST['week'])) {
$week = $_POST['week'];
}
if (isset($_POST['group'])) {
$group_name = $_POST['group'];
}
echo $week;
?>
我正在省略sql代码片段,因为它们工作正常。
编辑:现在我的状态代码是200,响应文本也可以。我的响应文本在预期的实际响应文本旁边显示一个奇怪的“输入”符号。这是正常的吗?它仍然进入错误块,而不是成功的代码块。
答案 0 :(得分:1)
您的PHP响应中的这些标记<body>,...
不能超过json。
一定只有:
<?php
$week = $_POST("data");
$json = json_decode($week);
echo json_encode($json);
?>
删除
上的评论// data:{week:week}
并使用有效值设置变量周:
数据:{周:周}
所以:
$.ajax({
dataType: "json",
type: "POST",
url : "php/remindUsers.php",
data : {week :week} ,
success : function(response){
console.log(response);
},
为了了解响应的形状。
答案 1 :(得分:1)
我无法完全回答你的问题,因为我需要更多有关最新情况的调试信息,但是有关你的代码的2-3件事可能会让我感到烦恼,可能会修复你的错误。
首先,在你的后端使用isset:
if (isset($_GET['your_input_name'])) {
$someData = $_GET['your_input_name'];
}
这里的isset部分非常重要。设置它然后再试一次。如果你没有500错误。可能是因为您的数据从未发送到您的后端,或者因为您没有检查好的输入名称。
其次,关于输入名称。我可以在您的代码中看到您发送的内容:
var data1 = {week:week, group:grp_name};
因此,在您的后端,您应该使用这样的值的名称来检索您的数据:
$week = $_POST("week");
第三,我不是json pro,但也许你的json无效。即使他没事,我建议你建立一个像这样的“清洁”:
var data = [
{ 'name' : 'week', 'value' : week}
];
最后,如果您使用表单将数据发送到php,那么您可以使用类似的东西:
var myForm = $("#myForm").serializeArray();
$.ajax({
url: 'yourUrl',
type: "GET",
data: myForm,
dataType: 'json',
success: function(res){
//your success code
},
error: function(){
//your error code
}
});
我希望这会有所帮助。
答案 2 :(得分:0)
使用这个
PHP
$week = $_POST['data'];
$json = json_encode($week);
echo $json;
JS
$.ajax({
dataType: "json",
type: "POST",
url : "php/remindUsers.php"
//data : {week :week} ,
data: {data:{week:'week', group:'grp_name'}} ,
success : function(response){
alert ("success !");
},
error : function(response){
alert("fail!");
}
})
答案 3 :(得分:0)
你做错了几件事。首先,您不希望在将数据发送到服务器之前对其进行字符串化。您想发送JSON,因此您的注释行是正确的。 PHP也存在问题。进入服务器的数据如下所示:
{week: "Something"}
因此,在PHP中,您希望访问以下数据:
$_POST["week"];
答案 4 :(得分:0)
我会说在函数中包装php并回显json。还可以检查是否有POSTed数据,如果没有返回错误消息。这未经过测试,但希望能指出正确的方向。
<?php
function getJSON() {
if (isset($_POST["data"] && !empty($_POST['data']) ) {
$week = $_POST["data"];
$json = json_decode($week);
echo $json;
} else {
echo "There was a problem returning your data";
}
}
getJSON();
?>
实际上,当我写这篇文章时,我意识到你可以在你的AJAX POST中尝试这些标题:
accepts: 'application/json',
contentType: 'application/json',
dataType: 'json'
希望有所帮助。
答案 5 :(得分:0)
有效。我找到了答案,感谢另一个SO帖子。
TIL:即使服务器响应正常,也会触发错误条件,因为从php返回javascript的数据不是json,因为我已明确提到 dataType:&#34; json&#34; 在ajax请求中。
链接到这里:
Ajax request returns 200 OK, but an error event is fired instead of success
感谢大家帮助我并指导我朝着正确的方向前进。干杯!