我有一个jquery函数,它接受表单值,序列化它们并将它们传递给Wordpress插件中的php函数。当我尝试检索post值时,我只能检索整个字符串,而不是每个值。这是我当前的jquery函数:
jQuery('.lesson_complete').change(function () {
if (jQuery(this).is(":checked")) {
//var module = jQuery(this).parent().find('.module-id').val();
//alert(module);
var progress_post = jQuery(this).parent().serialize();
jQuery.ajax({
type: "POST",
url: submitprogress.ajaxurl,
data: {
action: 'submit_progress',
data: progress_post
},
success: function (response) {
//alert(form_parent);
//alert('success');
alert(progress_post);
alert("working" + response);
//jQuery("#feedback").html(data);
}
});
return false;
}
})
<form type="post" action="#" id="moduleProgressForm">
<label for="lesson_complete">Finished with this lesson?</label>
<input type="checkbox" class="lesson_complete" value="1" name="lesson_complete" />
<input type="hidden" name="user_id" value="'.get_current_user_id().'"/>
<input type="hidden" name="post_id" value="'.$current_post.'"/>
<input type="hidden" class="module-id" name="module_id" value=""/>
</form>
我可以在函数中使用它来访问字符串:
$post_values = $_POST['data']
返回此字符串:
lesson_complete = 1&安培; USER_ID = 2及POST_ID = 1&安培;模块id = 1
但我无法访问个别帖子的值。我做错了什么?
答案 0 :(得分:0)
如果您希望传递一个Object以便能够通过键值配对访问值,则必须正确地序列化和转换对象。
var temp_post = jQuery(this).parent().serialize();
var progress_post = JSON.Stringify(temp_post);
这将创建一个JSON对象。确保您的后端PHP方法接受JSON对象而不仅仅是字符串,并且您将能够通过常规OOP表示法访问对象的属性。
答案 1 :(得分:0)
jQuery会将您提供的对象文字转换为data
设置为查询字符串(并将递归执行)。这意味着,
var progress_post = {
lesson_complete: 1,
user_id: 2,
post_id: 1,
module_id: 1
}
将成为
lesson_complete = 1&安培; USER_ID = 2及POST_ID = 1&安培;模块id = 1
这正是您收到的字符串。原因是在这种情况下,您将数据作为纯文本上载。但请注意您收到的字符串的结构。它们似乎都是关键值对,不是吗?
lesson_complete=1&
user_id=2&
post_id=1&
module_id=1
全部由&
字符粘在一起。 Parse_str救援:
parse_str($_POST['data'], $post_values);
parse_str会将这样的查询字符串转换为关联数组(如果省略第二个参数,则转换为单个变量),之后您可以按预期访问其元素:
echo $post_values['user_id']; // 2