我有一个包含行的应用,每行包含数据。行由用户创建(只是克隆样本行)。
我的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"}}]
}
现在我可以继续建造......这是一个非常令人头疼的问题。