0

我在 Rails 应用程序中的 ajax 请求遇到了一些问题。

我提出请求,单击时从链接中获取一些参数,然后我想刷新包含数据库中图像的部分。

这是我的ajax

    $.ajax({

        url:"gallery",
        data: { pie :categoria},
        type: "GET",
        async: true,
        dataType: "script"


    });

问题是在rails shell中我通过了我的参数。但它不会对视图进行任何更改。


我的外壳:

Started GET "/gallery?pie=VibPellizcables&_=1375047201412" for 127.0.0.1 at Sun Jul 28 18:33:21 -0300 2013
Processing by GalleryController#pro as JS
  Parameters: {"pie"=>"VibPellizcables", "_"=>"1375047201412"}
  Product Load (0.1ms)  SELECT `products`.* FROM `products` WHERE `products`.`pie` = 'VibPellizcables'
  Rendered sexytoys/_algo.html.haml (0.1ms)
Completed 200 OK in 1ms (Views: 0.6ms | ActiveRecord: 0.1ms)

我想更新一个包含我的数据库中的图像的部分。

这是我要更新的部分。

  #miniDiv 

    %ul#miniRecuadro
      - @products.each do |product|
        %li.mini= image_tag product.pic.url(:thumb)

我的控制器:

      def gallery
        @products = Product.find(:all, :conditions => {:pie => params[:pie]})
        #render :partial => "algo"
        flash[:notice] = "Mensaje ENVIADO >>"
        respond_to do |format|

          format.js {render :partial => 'algo', :conditions => {:pie => params[:pie]}}
         # format.json { render :json => @products  }
        end
4

1 回答 1

3

您必须在响应或 AJAX 回调中进行替换:

进行替换的响应

你需要渲染一个 JS 文件:

# app/controllers/gallery_controller.rb
def pro
  ...
  respond_to do |format|
    format.js # no render here
  end
  ...
end

# app/views/gallery/pro.js.erb
$('#your-container').html('<%= j( render partial: 'algo' )%>')

我不确定这条路径,如果这条路径错误,应用程序会抱怨,你会在浏览器控制台中看到它,因为这是 AJAX。我也不知道conditions视图是否支持选项。

回调做替换

$.ajax({

    url:"gallery",
    data: { pie :categoria},
    type: "GET",
    async: true,
    success: function(response){
      $('#your-container').html(response);
    }


});

注意我在这里删除dataType: 'script'了,因为你不想执行服务器响应。

在这种情况下,您可以使用您正在响应的 html 进行响应:

# gallery_controller.rb
...
  format.html {render :partial => 'algo', :conditions => {:pie => params[:pie]}}
...

请注意,由于您正在呈现 html,因此我更改了您的回复格式。

捷径

最后,如果您想在页面中的容器内从服务器加载内容,您可能会对load感兴趣:

$('#your-container').load('gallery', { pie: categoria });
于 2013-07-28T22:54:43.367 回答