1

我有一个有行的应用程序,每一行都包含数据。这些行由用户创建(只是克隆一个示例行)。

我的 ajax 函数看起来像这样。

save : function(el) {

        //Renaming the properties to match the row index and organize 
        jQuery('#application-builder-layout .builder-row').each(function(row) {

                // Iterate over the properties
                jQuery(this).find('input, select, textarea').each(function() {

                    // Save original name attr to element's data
                    jQuery(this).data('name', jQuery(this).attr('name') );

                    // Rewrite the name attr
                    jQuery(this).attr('name', 'application[rows]['+row+'][elements]['+jQuery(this).attr('name')+']');

                });

        });


        //Looping through each row and saving them seperately with new rowkey
        setTimeout(function() {

            // Iterate over the layers
            jQuery('#application-builder-layout .row-box').each(function(row) {

                // Reindex layerkey
                jQuery(this).find('input[name="rowkey"]').val(row);

                // Data to send
                $data = jQuery('#application-builder-layout .row-box').eq(row).find('input, textarea, select');
                //$data = $data.add( jQuery('#application-builder-layout')  );

                jQuery.ajax(jQuery('#form').attr('action'), {
                    type : 'POST',
                    data : $data.serialize(),
                    async : false,
                    success: function( response ) {
                      //console.log( response );  
                    }
                });

            });

        }, 500);

},

这是 jQuery,它是应用程序样式格式,所以这个函数在 var 中,并在提交函数中调用,问题不在于 ajax,在控制台中查看它可以很好地保存数据,就像我以前一样。

问题我无法将所有数据都放入数据库(只有最后一个 ajax 请求)看看下面的“表单数据”它显示了我的 ajax 数据的样子以及它如何插入数据库与它应该如何插入,我是使用 json 编码,通常这是可行的,但最近我切换到 PHP 中的 OOP 样式编码,所以我不确定这是否会改变什么?

PHP:

class MyApp {

    const Post_Type = 'page';

    public function __construct() {
        // register actions
        add_action('init', array(&$this, 'init'));
    }

    public function init() {
        // Initialize Post Type
        add_action('save_post', array(&$this, 'save_post'));
    }


    //The main save method
    public function save_post($post_id) {

        // Empty the builder
        if($_POST['rowkey'] == 0) {
            $builder = array();
        }

        $builder['rows'][$_POST['rowkey']] = $_POST['application']['rows'][$_POST['rowkey']];

        $builder = esc_sql(json_encode($builder));

        if(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
                return;
        }

        if($_POST['post_type'] == self::Post_Type && current_user_can('edit_post', $post_id)) {

                        // Update the post's meta field
                        update_post_meta($post_id, 'MY_DATABASE', $builder);

        } else {

                return;

        } 
    }


}

上面的工作正常,除了它没有将数据作为数组插入,只是插入最后一个 ajax post 调用,而不是每个。我确信在我的保存方法中我需要以某种方式重新配置它,但我只是在破解并且无法在网络上找到信息,所以我真的可以使用一些洞察力。

我希望我提供了足够的。

我的代码总结如下:为了清楚这里发生了什么,让我给你一些我的应用程序的基本 HTML。

//This gets cloned and the jQuery renames the rowkey to match the index.
<div class="row-box">
    <input type="hidden" name="rowkey" value="0">
    <div class="builder-row">
        <textarea style="display: block;" name="html"></textarea>
        <textarea style="display: block;" name="breakingbad"></textarea>
    </div>
</div>

总而言之,假设有 4 行,jQuery 重命名每一行,然后遍历每一行并为每一行提交一个 ajax 调用。然后 PHP 处理 $_POST,在以前使用我的自定义数据库的应用程序中,我让它工作,但使用 wp 数据库我遇到问题,也许我的方法中遗漏了一些东西?

表单数据: ajax 表单数据如下所示(这是标题中的表单数据,可以在控制台(firbug)或网络(chrome)中找到)

//First element
rowkey:0
application[rows][0][elements][html]:A
application[rows][0][elements][breakingbad]:123

然后如果有另一行ajax帖子再次

//Second element
rowkey:1
application[rows][1][elements][html]:B
application[rows][1][elements][breakingbad]:456

如此等等,数据库看起来像这样

{"rows":{"2":{"elements":{"html":"B","breakingbad":"456"}}}}

它应该更像这样

{"rows":[{"elements":{"html":"A","breakingbad":"123"},{"elements":{"html":"B","breakingbad":"456"}]}

Holy Smokes Batman:我想我明白了,这一切都取决于我如何$_POST尽快处理错误的更新并给出答案..

数据库看起来像这样

 {"rows":[
     {"elements":{"html":"A","breakingbad":"123"}},
     {"elements":{"html":"B","breakingbad":"456"}}]
 }

现在我可以继续构建.. 这真是令人头疼的问题。

4

0 回答 0