0

好吧,我敢肯定这很简单,但我的头发已经用光了。我正在向我的控制器发布一个 ajax 请求并尝试在 CoffeeScript 中获得响应。我尝试转向纯 JS,但没有任何区别。

jQuery 文档暗示我的 newImage() 应该是 newImage(data) 但如果我这样做,我会得到未定义的错误数据。使用此代码,我的警报只是未定义。

jQuery ->
  $('select[data-type=scene]').change ->
  i_num= $(this).attr('data-num').toString()
  i_value= $(this).find(':selected').text()
  request= 'new image for :'+ i_num + ': get :' + i_value  + ': image'
  $.post('/new_image', {request: => request}, newImage())

newImage= (new_url) ->
  alert new_url

控制器正在提供我可以在控制台中看到的响应,但 ajax 回调似乎没有抓住它。控制器代码是 .

 def new_image
   request= params['request'].split(':')
   @url= get_thumb_url(request[3])
   @img_num= request[1]
   reply= @img_num + '::' + @url
   render json: reply, content_type: 'text/json'
 end

响应是 3:: https://bnacreations.s3.amazonaws.com/g/thumbnails/image.jpg

关于我偏离轨道的任何建议?

4

1 回答 1

1

newImage这会在为 构建参数列表时调用该函数$.post

$.post('/new_image', {request: => request}, newImage())
# --------------------------------- function call --^^

如果您只想提供$.post对函数的引用(这是您想要做的),那么请去掉括号。此外,$.post只需要第二个参数中的一些数据,而request: => request有一个函数作为request. 你可能想要这个:

$.post('/new_image', { request: request }, newImage)

CoffeeScript 中的=>(fat-arrow)用于定义绑定函数,它不是用于构建哈希的 Ruby 风格的 hashrocket。

顺便说一句,CoffeeScript 有 Ruby-ish 字符串插值,所以你可以说:

request = "new image for :#{i_num}: get :#{i_value}: image"
于 2013-08-15T23:44:10.500 回答