我正在尝试使用jquery将一些非常简单的数据发布到php文件,然后获取json响应,但我似乎遇到了某个路障。这是我的jquery:
<script>
$(function() {
$('.resend-verify').click( function() {
var userid = $(this).attr('rel');
$.ajax({
type: "POST",
url: "resend_verification.php",
contentType: "application/json; charset=utf-8",
data: "userid=" + userid,
dataType: "json",
success: function(data) {
console.log(data.response);
if(data.response == 'error') {
$('div.alert').addClass('error');
}
$('div.alert').html(data.comment);
}
});
});
});
</script>
这是发布到
的php页面<?php
if ($_SERVER['REQUEST_METHOD'] == "POST") { // Check For Post
require '../../config.php'; // Site Settings
require '../../connectors/mysqlConnector.php';
include $DIR['php'] . 'functions.php'; // Common Functions
//var_dump(json_decode($_POST));
$UserID = $_POST['userid'];
$userSQL = "SELECT p.user_firstname,p.user_lastname,a.user_email,a.user_salt FROM web_profiles p INNER JOIN web_accounts a ON p.user_id = a.user_id WHERE p.user_id ='" . $UserID . "'";
$userQuery = mysql_query($userSQL);
//var_dump($userSQL);
$user = mysql_fetch_object($userQuery);
if (!$user->user_email) {
$response = array('response' => 'error', 'comment' => 'User not found');
} else {
// Send User Verification Email
$sendmail = new sendMail();
$message = createUserAuthEmail($user->user_firstname, $user->user_lastname, $user->user_salt, $Site['register_email_body']);
$content['body'] = '<br /><br />' . $message . '<br /><br />DO NOT REPLY TO THIS EMAIL! IT IS ONLY AN AUTOMATED NOTIFICATION EMAIL!';
$sendmail->set(to, $user->user_email);
$sendmail->set(subject, 'Action Required to Activate Membership');
$sendmail->set(from, 'no-reply@domain.com');
$sendmail->set(html, true);
$sendmail->getParams($content);
$sendmail->parseBody();
$sendmail->setHeaders();
if ($sendmail->send()) {
$response = array('response' => 'success', 'comment' => 'email sent');
} else {
$response = array('response' => 'error', 'comment' => 'Error sending email');
}
}
echo json_encode($response);
}
?>
我遇到的问题是,如果我使用contentType:“application / json; charset = utf-8”,$ _POST总是为空。当我删除contentType:“application / json; charset = utf-8”时,$ _POST被填充但我无法获得json响应。我做错了什么?
答案 0 :(得分:1)
您应该再次阅读jquery documentation,尤其是涵盖data
和dataType
参数的部分。 data
必须是键/值对象,即:
data: { 'userid': userid }
...对于dataType,允许的值是xml,html,text,json和jsonp。如果您的PHP脚本发送了一个合适的Content-type
标题(例如header('Content-type: text/json');
,那么您可以简单地将此参数保留为默认值('Intelligent guess')。jQuery将从其内容类型标题中推断响应类型。你应该发送标题,因为否则,服务器可能会假设你正在发送HTML并添加一个HTML内容类型标题本身,jQuery然后窒息。
在PHP脚本中设置internal encoding和output encoding可能也是一个好主意,这样它就能正确理解请求并发送格式正确的UTF-8响应。
如需进一步调试,您可能需要:
$_POST
数组和您发送的响应转储到服务器上的文本文件答案 1 :(得分:1)
我遇到同样问题的时间超过了我想承认的时间,然后我从PHP文档中读到了这个:
$ _ POST:传递给当前变量的关联变量数组 脚本通过HTTP POST方法时使用 application / x-www-form-urlencoded 或 multipart / form-data作为HTTP 请求中的Content-Type 。
我试图在没有jquery的情况下这样做,但是我构建了自己的xmlhttprequest对象。真正让我意识到$ _POST在查询是JSON格式时没有填充,或者以%编码类型以外的任何格式填充,当我最终放弃并尝试使用JQuery时,我查看了他们发送的原始帖子数据,毕竟它不是JSON,他们刚刚使用过&#34; application / x-www-form-urlencoded&#34;并在发送之前将我的JSON转换为urlencoded格式。 PHP然后愉快地用我的数据填充$ _POST数组,因为它是&#34;百分比编码&#34;而不是JSON数据。我认为$ _POST是一些神奇的东西,它会读取大多数内容类型并且神奇地填充,我认为这是原始数据,直到我记得$ HTTP_RAW_POST_DATA,但这是贬值的,人们现在使用&#34; php://输入& #34;并通过做这样的事情来阅读:
$rawPOST = file_get_contents('php://input');
所以应该能够在那里找到他们的JSON,但它不会被自动解析成单独的变量。
我希望至少我能帮助其他人,这篇文章已有4年历史了,但它说它被观看了7000多次。
答案 2 :(得分:0)
您应该尝试使用$.post
并在必要时将其与事件绑定。
我做了一个mousemove事件:
$.fn.saveArray = function() {
var data = {data: selectednumbers};
$.post('clickmap.php',{
data:JSON.stringify(data)
//contentType: 'application/json',
});
};