0

我对动作的 js 响应有疑问。我正在用轮询和 Redis 实现类似 IM 的东西。我发现的“问题”是在提交消息的那一刻。我想用按钮(正常方式)或通过 ENTER 来完成。当使用按钮提交表单时,它可以正常工作:创建消息,其他用户在他的屏幕中看到该消息,并且该消息通过 create.js 出现在我的屏幕上,该消息在发送到我的屏幕的最后一条消息之前出现。当我使用 ENTER 键提交表单时,除了 create.js 之外,一切正常(发送消息,其他人收到它),由于某种原因,它已加载 create.js,但不执行添加最后一个操作消息到我的屏幕。我把代码放在下面,提前谢谢大家;)。

创建.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

在我看来,您的表单提交到dashboard_messages_url,而您的按键功能 ajax 发布到dashboard_kid_conversation_messages_url. 检查您的路线以确保后者存在。

如果这不起作用,您可以告诉我们您在网络检查器的“网络”选项卡中看到的内容。

于 2013-05-22T11:52:33.390 回答
0

已解决,是AJAX dataType,删除即可,谢谢大家的帮助!

于 2013-05-22T14:17:08.270 回答