1

我有一个使用 CURL 的 Rails API,但不使用 $.ajax。这是制作 API 的控制器方法:

  def historic_returns
    start_date = Date.new(params[:start_year].to_i, params[:start_month].to_i)
    end_date = Date.new(params[:end_year].to_i, params[:end_month].to_i)

    @result = ShillerDataMonth.records_between_two_dates(start_date, end_date)

    respond_to do |format|
      format.json { render :json => @result }
    end
  end

这是返回预期输出的 CURL 请求:

curl -H 'Content-type: application/json' -H 'Accept: application/json' -d '{"start_year":"2008","start_month":"1","end_year":"2008","end_month":"12"}' 'http://localhost:3000/historic_returns.json'

这是单击按钮时执行的 CoffeeScript:

$ = jQuery

$ ->
  $('#return_calculator_button').click ->
    $.ajax ->
      url: "http://localhost:3000/historic_returns.json"
      contentType: "application/json"
      type: "GET"
      data: {"start_year":"2008","start_month":"1","end_year":"2008","end_month":"12"}
      dataType: "json"
      success: (data) ->
        alert("success #{data}")
      error: ->
        alert("failure")

当 contentType 标头包含在 $.ajax 调用中时,我收到以下错误:

GET http://localhost:3000/function%20()%20%7B%20%20%20%20%20%20%20%20return%20%…0%20%20%20%20%20%20%20%7D%20%20%20%20%20%20%20%20%7D;%20%20%20%20%20%20%7D 400 (Bad Request) 

当 $.ajax 调用中不包含 contentType 标头时,我收到以下错误:

GET http://localhost:3000/function%20()%20%7B%20%20%20%20%20%20%20%20return%20%…0%20%20%20%20%20%20%20%7D%20%20%20%20%20%20%20%20%7D;%20%20%20%20%20%20%7D 404 (Not Found)

编辑:这是#return_calculator_button 的代码

<div class="control-group">
  <div class="controls">
    <button type="button" class="btn btn-primary" id="return_calculator_button">Calculate the Return</button>
  </div>
</div>

编辑 2: Mu 是对的,我的 CoffeeScript 中有一个额外的 ->。这是正确的代码:

$ = jQuery

$ ->
  $('#return_calculator_button').click ->
    $.ajax
      url: "http://localhost:3000/historic_returns.json"
      #contentType: "application/json"
      type: "GET"
      data: {"start_year":"2008","start_month":"1","end_year":"2008","end_month":"12"}
      dataType: "json"
      success: (data) ->
        alert("success #{data}")
        console.log data
      error: ->
        alert("failure")

谢谢您的帮助。

4

1 回答 1

1

您正在传递$.ajax一个函数:

$.ajax ->
# -----^^

该函数恰好返回$.ajax通常得到的通常选项对象,但这是偶然的。结果是$.ajax认为您使用的是$.ajax(url, [settings])表单而不是通常的$.ajax([settings])表单。所以$.ajax认为你的函数是一个 URL,而你的日志中的混乱是 URL 编码字符串化函数的结果。

删除->

$.ajax
  url: "http://localhost:3000/historic_returns.json"
  # as you have now...
于 2013-07-02T02:43:00.073 回答