【问题标题】:Ajax does not receive data on second callAjax 在第二次调用时不接收数据
【发布时间】:2015-11-09 04:59:42
【问题描述】:

我正在制作日历,并在页面加载时发出 ajax 请求以从 rails db 获取一些数据。

ajax 调用在页面加载时成功接收对象。

当我单击下一个或上一个按钮以获取上个月或下个月的数据时,即使发生 ajax 调用,成功回调也没有接收到数据对象

我收到一组对象,我可以像下面的代码一样访问它们,但仅用于 页面加载 ajax 调用,ajax 调用会获得状态代码 200 - 每次都可以,但没有收到 json 对象在下一个请求。

换句话说,console.log(data) 仅适用于页面加载事件,而 console.log($month) 每次都有效

更新:使用开发工具,我可以看到响应数据,但无法通过 ajax 成功访问它们...

更新 2:当我取消注释错误时,我收到消息“错误代码是:OK”

我的 ajax 代码如下所示

function retrieve($month) {

    console.log($month);
    var jsondata = {
      events: {
        month: $month,
      }
    }
    $.ajax({
      cache: false,
      type: "POST",
      url: "/events/find",
      data: jsondata,
      dataType: json,

      statusCode: {

        200: function() {
          //alert("200");
        },
        202: function() {
          //alert("202");
        }
      },
      success: function(data) {
        //alert("Data Send!");
        //var data = JSON.stringify(data);
        console.log(data);
        for (var i = 0; i < data.length; i++) {
          var day = data[i].date.substring(0, 2);
          $("td[data-day='" + day + "']").addClass('added');
        }

      },
      error: function(xhr) {
        //alert("The error code is: " + xhr.statusText);
      }
    });
  }

events_controller

def find
    params = event_params

    @events = Event.where('date LIKE ?',"%#{params[:month]}%")

    respond_to do |format|
      if @events
        format.json {
          render json: @events.to_json
        }
      else
        render 'index'
      end
    end
  end

private
    def event_params
      params.require(:events).permit(:date, :timerange,:month)
    end

来自 rails 日志的示例响应

Started POST "/events/find" for ::1 at 2015-08-16 16:09:59 +0300
Processing by EventsController#find as */*
  Parameters: {"events"=>{"month"=>"September"}}
  Event Load (0.1ms)  SELECT "events".* FROM "events" WHERE (date LIKE '%September%')
Completed 200 OK in 2ms (Views: 0.1ms | ActiveRecord: 0.1ms)

【问题讨论】:

  • 请删除您之前的问题,或者如果您已经完善它,请编辑它。这似乎是以不同的方式提出的同一个问题。
  • 关闭了另一个。这更清楚了。
  • 下一个/上一个时,确切的控制台输出(如果有的话)是什么?您是否尝试在开发者工具中调试调用??
  • 我收到一组对象,我可以像上面的代码一样访问这些对象,但仅用于页面加载 ajax 调用,ajax 调用的状态代码为 200 - 每次都可以,但下次没有收到 json 对象要求。换句话说,console.log(data) 仅适用于页面加载事件,而 console.log($month) 每次都有效

标签: javascript jquery ruby-on-rails ajax


【解决方案1】:

仅供可能需要此功能的人将来参考。

问题出在dataType: json

似乎当rails将结果转换为json时,它们对jquery无效,因此触发了错误事件。

从 ajax 请求中删除 dataType.json 解决了我的问题。

【讨论】:

  • jQuery 总是对datatype 进行智能猜测,如果没有明确设置,很高兴引起注意。 :)
  • 是的,我对 rails 没有正确地将对象转换为 json 感到生气;p
猜你喜欢
  • 1970-01-01
  • 2018-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多