从控制器返回到Ajax的数据混乱



我的一个coffee脚本中有一个AJAX调用,它指向控制器的一个方法。AJAX调用如下:

auto = ->
  $.ajax
    url  : '<method_name>'
    type : 'POST'
    data :
      <variable_name>: $('element').val()
    success: (data, status, response) ->
      alert('Pass')
    error: ->
     alert('Fail')

我在控制器中的方法看起来像:

def method
  ...
  ...
  <book> object can be invalid object.
  respond_to do |format|
    format.json { render json: {book: {title: title}} }
  end
end

现在,这个"book/title"(来自控制器)应该可以通过"data"变量(在咖啡脚本中)在我的咖啡脚本中使用。正确的

我的问题是,它什么时候会进入"错误"块(对于咖啡脚本)?我可以看到我的"book"对象为NULL(在控制器中),但它仍然在"success"块中(在咖啡脚本中)。。我想如果json对象为NULL,它就会进入"error"块。

每当ajax失败时(例如,如果存在路由错误或控制器方法中的任何错误等),只有它会进入错误块。在这里,无论book是否为NULL,您的方法都可以正常工作,没有错误。您可以在控制器中检查,若book对象为NULL,则返回一些标志,然后在AJAX中检查该变量是否成功。例如:

def method
  ...
  ...
  <book> object can be invalid object.
  if book.nil?
     format.json { render json: {is_data_null: true} }
  else
    respond_to do |format|
      format.json { render json: {book: {title: title}} }
    end
  end
end

然后在AJAX成功块中,您可以检查该标志。

最新更新