添加记录,然后使用更新的阵列AJAX重新填充选择字段

时间:2014-12-13 02:35:25

标签: ajax laravel laravel-4

情况:Laravel 4.2 我有一个带有选择框的表单

{{ Form::select('NameCustomary', $ent) }}

预先填好的人名。 在控制器中:

$ent = array('' => 'Choose existing person') + Entity::orderBy('NameCustomary','asc')->lists('NameCustomary', 'id');

我需要什么: 如果一个人(模型名称是实体)不在列表中,我希望

  • 添加新实体,然后使用更新的$ ent重新填充选择。
  • 如果可能的话,我希望在新添加的名称上设置选择框,以免给用户带来麻烦。附加信息:选择框正在处理select2脚本。

我尝试了好几次,但是我在掌握AJAX和JQuery方面遇到了困难,但未能将这种机制放在一起。

谢谢。

1 个答案:

答案 0 :(得分:0)

我提出了这个解决方案。它很粗糙,但可以按照预期工作。

首先,阅读this tutorial后 我设法使用AJAX发布表单 重要的提示: 使用AJAX的表单必须放在要修改的表单的外部!我使用了一个模态 - 这样可以使用原始表单中的按钮触发AJAX表单。

TWO, 在控制器方法中,我向数据库中添加了新实体,并且还包含了这个响应数组:

        $response = array(
        'status' => 'success',
        'msg' => 'Option created successfully',
        'new_entity_id' => '<input class="" name="NameCustomary" type="hidden" value="'.$LastInsertId.'" id="NameCustomary">',
        'new_entity' => Input::get( 'NameCustomary' )
    );

    return Response::json( $response );

THIRD, 我添加了一个JS来替换原始表单的内容。请注意上面数组中new_entity_id的值。我最初的问题只是我的误解 - 我是一个菜鸟。我只需要一种填充原始表单的方法。我不需要使用选择框,因为我已经选择了新创建的值。

jQuery(document).ready(function($){

$('#form-quick-entity').on('submit', function(){ 

   // ajax post method to pass form data to the 
    $.post(
        $(this).prop('action'),        {
            "_token": $( this ).find( 'input[name=_token]' ).val(),
            "option_name": $( '#kv_option_name' ).val(),
            "option_value": $( '#kv_option_value' ).val(),
            "NameCustomary": $( this ).find( 'input[name=NameCustomary]' ).val(),
            "itemtype_id": $( this ).find( 'input[name=itemtype_id]' ).val()
        },
        function(data){
            //response after the process.
            $('#experiment_update2').text(data.msg); 
            $('#entity_place').replaceWith(data.new_entity_id); 
            $('#entity_name').text(data.new_entity); 
            $('#entity_name').addClass('but- block padding csh_11 margins'); 
            $('#entity_name').removeClass('hidden'); 
            $('#modal_quick_add_entity').modal('hide');
        },
        'json'
    ); 

    return false;
}); 

});

注意上面JS中的最后一个命令:它是关闭模态的命令。它由将表单发送到控制器方法的相同点击触发。它在更换原始表格并且不再需要模态之后发生 -

DONE。

如果您知道更好的解决方案或有办法改进上述代码,请执行此操作!