发送每个元素的ajax请求?

时间:2013-09-23 02:36:32

标签: php jquery

我有一个包含行的应用,每行包含数据。行由用户创建(只是克隆样本行)。

我的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"}]}

圣洁吸烟蝙蝠侠:我想我明白了,这一切都在于我如何快速处理$_POST病情更新的答案..

数据库看起来很像

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

现在我可以继续建造......这是一个非常令人头疼的问题。

0 个答案:

没有答案