无法解析ajax中的单个帖子值

时间:2015-08-01 17:25:19

标签: jquery ajax post serialization

我有一个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

但我无法访问个别帖子的值。我做错了什么?

2 个答案:

答案 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