При добавлении тега div в мой файл .js.erb функционал Ajax не работает. - PullRequest
0 голосов
/ 16 мая 2011

Я делаю некоторые стили в своем коде, чтобы отображать время публикации сообщения на форуме группы в моем приложении. Текущее размещение каждого сообщения в этом форуме работает с функциональностью AJAX, реализованной через Jquery 1.4.

При включении тега div в мой файл post_message.js.erb я обнаружил, что сообщение не публикуется на домашней странице группы (место, где у меня есть все обсуждения, относящиеся к группе - функциональность, аналогичная той, которая была бы увидеть в группах FB).

Сообщение сохраняется в моей БД, и при обновлении страницы я вижу последнее опубликованное сообщение.

Код в post_message.js.erb выглядит следующим образом: -

$("#new_post").before('<div id ="new_post"><%= escape_javascript(flash.delete(:notice)) %></div>');<!--TO-DO the flash messages aren't yet enabled/working-->
$("#latest_post").prepend("<%= @group_post.message %> by <%=  Investor.find(@group_post.post_by).first_name %>  <%=  distance_of_time_in_words(@group_post.created_at,Time.now) %> ago <br/><br/><hr/>");
$("#new_post")[0].reset();

Приведенный выше код перестает нормально работать, когда я изменяю вторую строку на: -

$("#latest_post").prepend("<%= @group_post.message %> by <%=  Investor.find(@group_post.post_by).first_name %> <div class ="contentdispgrp"> <%=  distance_of_time_in_words(@group_post.created_at,Time.now) %> ago </div><br/><br/><hr/>");

Часть кода, соответствующая вышеприведенному, в файле _common.html.erb (это частичное представление, где у меня есть все html-теги и идентификаторы, которые я в конечном итоге использую в своем файле .js.erb) выглядит следующим образом: -

<table>
<tr>

<%if @current_user.is_an_existing_member_of_group(@investor_group)%>
<%form_for  :group_post, @group_post, :url => {:action => :post_message, :id => params[:id]},:html => {:multipart => 'true', :id => 'new_post'} do |f| -%>
    Start Discussion:<br><%=f.text_field :message%>
   <!--<%=f.file_field :photo%> -->
   <%=submit_tag "Post"%></p>
  <%end%>

   <div id = "latest_post"> </div>


<%for a in @group_all_posts %>
<%= a.message %> by <%=  Investor.find(a.post_by).first_name %> <div class ="contentdispgrp" id="style_chck"> <%=  distance_of_time_in_words(a.created_at,Time.now) %> ago </div><br/><br/> <hr/>

        <%end%>


</tr>
<%end%>
</table>

Мой метод post_message в контроллере групп выглядит так: -

 def post_message 
      @investor_group = InvestorGroup.find(params[:id])


      unless @current_user.is_an_existing_member_of_group(@investor_group)
        flash[:notice] = "Please join this group to participate in discussions"
        redirect_to :action => :show, :id => @investor_group and return # try to find out what exactly does this command do with return stmnt
      else
        @group_post = GroupPost.new(params[:group_post])
      end
      #@group_post = GroupPost.new(params[:group_post])

      investor_id = session['investor_id']
      @group_post.investor_group_id = @investor_group.id
      @group_post.post_by = investor_id
      if @group_post.save
        flash[:notice] = 'Post was successfully created.'
       # redirect_to :action => :show, :id => params[:id] - removed after trying to implement ajax via jquery
      else
        flash[:notice] = 'Post was not successfully created.'
      end


      respond_to do |format|
        format.html {redirect_to :action => "show", :id => params[:id]}
        format.js
      end

  end

Как я могу это исправить, не обновляя страницу? Я не уверен, что я делаю неправильно. Пожалуйста, помогите.

Спасибо.

[EDIT]

код файла group.js: -

jQuery.ajaxSetup({
    'beforeSend' : function(xhr) {
        xhr.setRequestHeader("Accept","text/javascript")
        }
})

$(document).ready(function(){
    $("#new_post").submit(function(){
        $.post($(this).attr("action"),$(this).serialize(),null,"script");
        return false;
    })
})

Ответы [ 3 ]

1 голос
/ 27 февраля 2012

Мне удалось решить эту проблему, добавив еще один тег на страницу, содержащую элементы управления, которые я хотел скрыть или раскрыть.

Я не мог получить ни дисплей div: ни один для программной работы, ни asp: Panel для переключения его видимости.

ASP.NET рендерил страницу, в частности ее части, которые я хотел скрыть или раскрыть, прежде чем AJAX смог изменить параметры отображения.UpdateMode = "Always" сигнализировал AJAX обновлять и другие части.

0 голосов
/ 17 мая 2011

Ошибка была исправлена ​​удалением лишних кавычек ("), использованных при определении класса по таблице стилей, уже была пара кавычек с методом prepend .. in post_message.js.erb.

0 голосов
/ 16 мая 2011

Можете ли вы подтвердить, что ваш AJAX работает? Я бы ожидал увидеть ': remote => true' в вашем теге формы. Если бы его там не было, я бы не подумал, что будет вызван ваш ответ format.js.

form_for  :group_post, @group_post, :remote=>true ...

Я думаю, что когда вы обновляете страницу, она не вызывает код js, а просто вызывает format.html. Для проверки вы можете проверить свой журнал или поместить оператор печати в блоке формата и посмотреть, будет ли он напечатан.

format.js do
    puts "I am here"
end
...