我有这段代码:
jQuery('#send-visitor-'+postId).on('click', function() {
console.log(ratingArray); //just to be sure
var data = {
action: 'send_rating',
nonce: nonce,
post_id: postId,
rating: ratingArray,
set_type: setType
}
console.log(data);
//Send value to the Server
jQuery.post(ajaxurl, data, function(response) {
//console.log(response);
});
});
ratingArray存在,我确定,我可以通过console.log看到它 然后,我做console.log(data.rating),一切都很好。
但是当我使用jQuery.post发送数据var时,除非评级,否则发送所有参数。
答案 0 :(得分:2)
发送到服务器的数据的默认编码为application/x-www-form-urlencoded; charset=UTF-8
。在data
选项的the documentation中,它显示:
数据强>
键入:PlainObject或String或Array
要发送到服务器的数据。如果不是字符串,它将转换为查询字符串。它附加到GET请求的URL。请参阅processData选项以防止此自动处理。 对象必须是键/值对。
(我的重点)
这意味着您的ratingArray
可能正在转换为字符串,以便在发送到服务器时用作键/值对中的值。您还没有说明ratingArray
的内容是什么,但除非它们可以通过默认的Array#toString
有意义地转换为字符串,否则这可能是一个问题。在9月份,如果服务器期望的不是数据的字符串版本,它可能不会正确地反序列化rating
。
您有几个选择:
自行将ratingArray
变为字符串,格式是服务器希望查看rating
参数的格式,然后转回数组。
以JSON而不是URI编码的表单参数发送数据。 您的服务器代码/配置必须具备预期效果。为此,您需要在通话中指定contentType: 'json'
(和更新服务器代码/ config来处理它)。客户端的部分看起来像这样:
$.ajax({
type: "POST",
url: ajaxurl,
data: JSON.stringify(data),
contentType: 'json',
success: function(response) {
// ...
}
});
再次,还需要进行服务器端更改。
使用默认编码将数据作为单个表单字段发送,使该单个字段的值为JSON字符串。然后在服务器端处理代码中检索该单个值,反序列化JSON,并使用结果。这有时比#2简单一些。客户端部分看起来像这样:
jQuery.post(ajaxurl, {data: JSON.stringify(data), function(response) {
//console.log(response);
});
...然后服务器将从data
POST参数获取字符串,从JSON反序列化它,并使用它。