Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用ajax表单提交在不刷新的情况下更新页面元素_Javascript_Jquery_Ruby On Rails_Ajax_Ajaxform - Fatal编程技术网

Javascript 使用ajax表单提交在不刷新的情况下更新页面元素

Javascript 使用ajax表单提交在不刷新的情况下更新页面元素,javascript,jquery,ruby-on-rails,ajax,ajaxform,Javascript,Jquery,Ruby On Rails,Ajax,Ajaxform,我在同一个页面上有一个带有嵌套属性的表单和一个html列表元素。我正在使用AJAX请求处理表单提交。在提交时,我希望保持在同一页面上,并更新列表以显示刚刚提交的项目,而不刷新页面 下面的代码显示提交处理程序的javascript。我希望能够使用jquery将表单数据附加到列表中,但我运气不太好。我曾尝试使用rails低调的javascript,但在这种情况下也无法实现 任何帮助都将不胜感激 $('#new_box').submit(function(event){ event.preve

我在同一个页面上有一个带有嵌套属性的表单和一个html列表元素。我正在使用AJAX请求处理表单提交。在提交时,我希望保持在同一页面上,并更新列表以显示刚刚提交的项目,而不刷新页面

下面的代码显示提交处理程序的javascript。我希望能够使用jquery将表单数据附加到列表中,但我运气不太好。我曾尝试使用rails低调的javascript,但在这种情况下也无法实现

任何帮助都将不胜感激

$('#new_box').submit(function(event){
    event.preventDefault();

    var cube = newCube($("#box_name").val(), 25, 25, 25);
    addCube(cube);

    var data = {};
    data["box"] = {};
    data["box"]["x"] = cube.position.x;
    data["box"]["y"] = cube.position.y;
    data["box"]["z"] = cube.position.z;

    var formData = $(this).serialize() + '&' + $.param(data);

    var locker_id = $('#my-canvas').data('locker').id;

    $.ajax({
      url: '/lockers/' + locker_id + '/boxes',
      method: 'post',
      dataType: 'json',
      data: formData,
      error: function(){
        alert("Could not add box!");
      },
      success: function(data){
        $('.box-list').append(formData);
      }
    });

  });
名单如下:

<ul class="list-group box-list">
    <li class="list-group-item box" id="<%= dom_id(box) %>" data-box="<%= box.to_json %>">
      <%= link_to box.name, "javascript:void(0)" %>
      <span class="badge"><%= box.items.count %></span>
      <ul class="list-group box-items">
        <% box.items.each do |item| %>
        <li class="list-group-item"><%= item.name %></li>
        <% end %>
      </ul>
    </li> 
</ul>

我最终将ajax响应呈现为html部分,然后将该部分添加到ajax请求的成功块中

控制器:

respond_to do |format|
      if @box.save
        @item = Item.new
        format.html { render partial: 'boxes/box_list', locals: { box: @box } }
      end
    end
javascript:

$.ajax({
      url: '/lockers/' + locker_id + '/boxes.html',
      method: 'post',
      data: formData,
      error: function(){
        alert("Could not add box!");
      },
      success: function(response){
        $('.box-list').append(response);
        $('input[type=text]').val('');
      }
    });

为什么要附加formData而不是服务器上的数据?
$.ajax({
      url: '/lockers/' + locker_id + '/boxes.html',
      method: 'post',
      data: formData,
      error: function(){
        alert("Could not add box!");
      },
      success: function(response){
        $('.box-list').append(response);
        $('input[type=text]').val('');
      }
    });