我正在尝试使用$ .ajax来尝试一个非常简单的请求并获得响应。 JSON。我已经尝试过从php文件中返回一个简单的文本短语。 我的js部分代码就是这样调用beemailer.php来获得响应。
$.ajax({
type: 'POST',
dataType: "json",
contentType: "application/json; charset=utf-8",
url: 'beemailer.php',
data: {
'name': data_name,
'email': data_email,
'message': data_message,
'subject': data_subject
},
success: function (data) {
var output = jQuery.parseJSON(data);
console.log(output);
alert(output);
},
error: function (error, x, y) {
console.log(error);
alert(x, y);
}
)
};
而beemailer.php是这样的:
<?php
$to = "ashish_sharma307@hotmail.com";
$subject = $_POST['subject'];
$message =$_POST['message'];
$headers = "From:".$_POST['name']."(".$_POST['email'].")";
mail($to,$subject,$message,$headers);
$response = "The mail has been sent. Thank You the valid mail.";
header("Content-Type: application/json; charset=utf-8", true);
echo json_encode($response);
?>
我现在需要的只是让$ response文本得到警告。 任何帮助将不胜感激。
答案 0 :(得分:3)
从ajax
电话中移除以下代码并尝试:
contentType: "application/json; charset=utf-8",
jQuery.parseJSON(data)
不需要,因为Content-Type
在json
中通过以下代码进行设置和编码:
header("Content-Type: application/json; charset=utf-8", true);
echo json_encode($response);
更新了包含测试数据的代码:
JS
$.ajax({
type: 'POST',
dataType: "json",
url : 'beemailer.php',
data: {name: 'rai', email: 'rai@test.com', message: 'Test message', subject: 'Test subject'},
success : function(data) {
console.log(data);
alert(data);
},
error: function(error, x, y)
{
console.log(error);
alert(x, y);
}
});
PHP(beemailer.php)
<?php
$to = "ashish_sharma307@hotmail.com";
$subject = $_POST['subject'];
$message = $_POST['message'];
$headers = "From:" . $_POST['name'] . "(" . $_POST['email'] . ")";
mail($to, $subject, $message, $headers);
$response = "The mail has been sent. Thank You the valid mail.";
header("Content-Type: application/json; charset=utf-8", true);
echo json_encode($response);
?>
对象示例:
$result = array();
$result['status'] = 'success';
$result['message'] = 'The mail has been sent. Thank You the valid mail.';
header("Content-Type: application/json; charset=utf-8", true);
echo json_encode($result);
JS访问对象:
$.ajax({
type: 'POST',
dataType: "json",
url : 'beemailer.php',
data: {name: 'rai', email: 'rai@test.com', message: 'Test message', subject: 'Test subject'},
success : function(data) {
alert('status: ' + data.status + '\nmessage: ' + data.message);
},
error: function(error, x, y)
{
console.log(error);
alert(x, y);
}
});
答案 1 :(得分:1)
因为您已经说过dataType: "json"
,所以jQuery会在调用success
函数之前为您解析JSON,因此您传入parseJSON
的内容已经是对象图,而不是一个字符串。取出该电话,而不是使用output
,只需直接使用data
。
但是,从PHP返回的内容不是有效的JSON文档,它只是一个JSON 片段(一个字符串)。 JSON 文档必须始终具有顶级对象或数组(more)。因此,您需要将该字符串包装在对象或数组中。
另请注意,您错误地使用了contentType
选项。这定义了您发送的类型,而不是您希望接收的类型。
例如:
$response = "The mail has been sent. Thank You the valid mail.";
header("Content-Type: application/json; charset=utf-8", true);
echo json_encode(array(message => $response));
...然后在success
函数中:
success: function(data) {
alert(data.message);
}
请注意我在PHP中使用的密钥(message
)如何成为客户端上生成的反序列化JSON的密钥。
这个完整的例子有效:
PHP(test.php
):
<?php
$response = 'This is a test message. You sent: ' . $_POST['param'];
header('Content-Type: application/json; charset=utf8', true);
echo json_encode(array(message => $response));
?>
HTML和脚本:
<!doctype html>
<html>
<head>
<title>Test Page</title>
<meta charset="UTF-8">
</head>
<body>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<script>
$.ajax({
type: 'POST',
url: 'test.php',
data: {param: 'Test param'},
success: function(data) {
alert(data.message);
}
});
</script>
</html>
在下面的评论中你说:
请您解释一下......为什么我在回复文本时没有收到文本作为回复。
您将返回 JSON ,这是对象图的文本表示。
如果你愿意,你绝对可以只返回文字。要做到这一点,不要涉及JSON。这是一个例子,但它不会解决你在消息之前获得无关的HTML输出的问题,这是你的PHP中发生的事情:
PHP(test.php
):
<?php
header('Content-Type: text/plain; charset=utf-8', true);
$response = 'This is a test message. You sent: ' . $_POST['param'];
echo $response;
?>
HTML和脚本:
<!doctype html>
<html>
<head>
<title>Test Page</title>
<meta charset="UTF-8">
</head>
<body>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<script>
$.ajax({
type: 'POST',
url: 'test.php',
data: {param: 'Test param'},
success: function(data) {
alert(data);
}
});
</script>
</html>
答案 2 :(得分:0)
您的服务器可能已返回通知/警告。请在某个时候禁用您的错误报告进行测试。 error_reporting(0),这适用于php 5.4。
希望这能帮助遇到同样问题的人。
答案 3 :(得分:0)
我刚刚发现了一些关于PHP json_encode
和JS AJAX parseerror
的绝对疯狂的事情。如果它能帮助一个人证明我在这里包括它。
我完全无法理解parseerror
s返回一个涉及最简单的PHP对象的对象:只是一个普通的字符串键和一个短字符串值。
当我将开发日志消息放入我的代码中时,我通常会在消息开头添加“£”,以便有时更容易找到它们。无意中我在这条消息的开头放了一个“£”返回到JS AJAX处理......而这个导致了parseerror
!
我个人认为这是一个错误......我很惊讶于2017年找到它。我不知道为什么一个领先的“£”可能会产生这种效果,并且(自然地)想知道其他角色(领先或其他) )可以产生parseerror
。
我刚刚对此进行了搜索,发现有人提到英镑符号问题here(2011)。
当你向mysqli
提交SQL语句时,你必须让它们通过一个转义函数......这个经验让我想知道从PHP到JS AJAX处理程序的字符串是否可能不需要。 ..?
任何专家都在评论?