Jquery Rails使用JSON响应,在Ajax中显示闪烁

Jquery Rails使用JSON响应,在Ajax中显示闪烁,jquery,ruby-on-rails,ajax,json,flash,Jquery,Ruby On Rails,Ajax,Json,Flash,我有以下代码: def create api_params = params[:criteria] api_params = params[:criteria].reject{|k,v| v.to_s.blank?} @j = JobAgent.new(name_for_job_agent(current_user), true, api_params) result = Sap.submit_job_agent(@j.name, @j.to_xml, ap

我有以下代码:

  def create
    api_params = params[:criteria]
    api_params = params[:criteria].reject{|k,v| v.to_s.blank?}

    @j = JobAgent.new(name_for_job_agent(current_user), true, api_params)
    result = Sap.submit_job_agent(@j.name, @j.to_xml, api_params_for_user)

    parser = MessageParser.new(result.body["RESULT"])
    parser.messages.each do |message|
      if message.type = "E"
        flash[:error] = "test"
        respond_to do |format|
          format.json { render :json => flash}
        end
      end
    end
  end
My jobs.html.erb

  <div class="alert alert-error" style="display: none;"></div>
  <p><%= link_to t("jobs.index.buttons.similar_functions"), user_email_settings_path, :class => "nice medium blue button", :id => "saveAgent" %> <small id="agent-saved" style="font-size: 1em !important;display: none;"><%= t("jobs.index.saved_agent") %></small><br /></p>
现在因为它是ajax,我不能以正常的方式渲染我的Flash,我必须通过JSON传递一些东西。我的代码似乎有50%的时间都能正常工作,有时他返回正确的“测试”,有时他什么也不返回

这是正确的做法吗?我怎样才能让它100%工作

谢谢

编辑1:

我正在尝试以下方法,可以在这里找到:

def testme
回应待办事项|格式|
msg={:status=>“ok”,:message=>“Success!”,:html=>“…”}
format.json{render:json=>msg}#不要执行msg.to_json
结束
结束

但是如何在我的完整函数中读取msg?

当您使用
flash[:error]='…'
时,消息将在下一个请求中使用,因为此语法通常在
重定向到
之前使用

在您的情况下,您需要立即收到消息,因为您使用的是
render
,因此您应该使用:

flash.now[:error] = '...'

看看它是如何工作的:

我已经这样修复了它,将我的控制器更改为:

  respond_to do |format|
    format.json  { render :json =>{ :message => "Hello world"} }
  end
并将我的脚本更改为:

  $("#saveAgent").on('click', function (event) {
    event.preventDefault();
    $("#saveAgent").addClass("disabled");
    if( $("#saveAgent").hasClass("disabled")) {
          $.ajax({
            type: 'POST',
            url: $(this).attr("href"),
            data: $("form").serialize(),
            success: function(data) {
              $("#agent-saved").show(1).delay(20000).fadeOut(800);
              $("#saveAgent").removeClass("disabled");

              if (data.message != "") {
                $('.alert.alert-error').show();
                $('.alert.alert-error').text(data.message);
              }
            }
          });
    }
  });

亲爱的先生,我已将其更改为flash。现在[:error]=“Hello world”并尝试执行警报(“”);和警报(“”);两个都是空的,flash.now.error也一样
  respond_to do |format|
    format.json  { render :json =>{ :message => "Hello world"} }
  end
  $("#saveAgent").on('click', function (event) {
    event.preventDefault();
    $("#saveAgent").addClass("disabled");
    if( $("#saveAgent").hasClass("disabled")) {
          $.ajax({
            type: 'POST',
            url: $(this).attr("href"),
            data: $("form").serialize(),
            success: function(data) {
              $("#agent-saved").show(1).delay(20000).fadeOut(800);
              $("#saveAgent").removeClass("disabled");

              if (data.message != "") {
                $('.alert.alert-error').show();
                $('.alert.alert-error').text(data.message);
              }
            }
          });
    }
  });