0

アクションの js 応答に問題があります。IM のようなものをポーリングと Redis で実装しています。私が見つけた「問題」は、メッセージを送信する瞬間です。ボタン(通常の方法)またはENTERを使用して実行したい。ボタンを使用してフォームを送信すると、正しく機能します。メッセージを作成すると、他のユーザーの画面にメッセージが表示され、メッセージが create.js を介して画面に表示され、画面に送信された最後のメッセージが付加されます。ENTER キーを使用してフォームを送信すると、create.js を除いてすべて正常に機能します (メッセージを送信し、現時点で他の人がそれを受信します)。私の画面へのメッセージ。以下にコードを記載します。よろしくお願いします;)。

create.js

$(".conversations").prepend("#{escape_javascript(render partial: 'dashboard/kid_conversations/show_message', locals: { message: @message})}");
$("#kid_conversation_message_body").val("");

これは、ENTER 送信を許可する js です。

  setInterval(function(){
    $.ajax({
      url: "#{dashboard_kid_conversation_conversation_polling_url(current_kid, token: (params[:token] rescue nil))}",
    })},2000);

  $('#kid_conversation_message_body').keypress(function(e) {
    if (e.keyCode == 13 && !e.shiftKey) {
      e.preventDefault();
      $.ajax({
        url: "#{dashboard_kid_conversation_messages_url}",
        type: "POST",
        data: $(this).serialize() + "&conversation_token=" + "#{params[:token]}",
        success: $("#kid_conversation_message_body").val(""),
        dataType: "json"
      });
    }
  });

ENTER キーを押すと最後のログが記録されるため、create.js が読み込まれます。

  Rendered dashboard/kid_conversations/_show_message.html.haml (6.5ms)
  Rendered dashboard/kid_conversation_messages/create.js.haml (11.4ms)
Completed 200 OK in 287ms (Views: 270.8ms)

作成アクション:

  def create
    @message                    = KidConversationMessage.new(params[:kid_conversation_message])
    @message.kid_conversation   = @conversation
    @message.kid                = current_kid

    @message.save
  end

フォーム、私は Haml を使用します

.response
  = form_for [:dashboard, @message] , html: {remote: true}do |f|
    = hidden_field_tag :conversation_token, :body , :value=> @conversation.token
    .control-group
      = f.label :body, _('Reply')
      = f.text_area :body, :rows => 4
    = submit_tag _('Send'), :class => 'btn button'
4

2 に答える 2

0

解決しました。AJAX dataType でした。削除しても問題ありません。ご協力ありがとうございました。

于 2013-05-22T14:17:08.270 に答える