Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 更改时的Ajax不会覆盖上的数据。完成_Javascript_Jquery_Ruby On Rails_Ajax_Coffeescript - Fatal编程技术网

Javascript 更改时的Ajax不会覆盖上的数据。完成

Javascript 更改时的Ajax不会覆盖上的数据。完成,javascript,jquery,ruby-on-rails,ajax,coffeescript,Javascript,Jquery,Ruby On Rails,Ajax,Coffeescript,我一直在构建一个小插件,以重用rails应用程序中的一些代码,根据父选择元素和ajax响应的值来构建和分解选择元素。在我开始将这些代码分离成可重用的代码之前,所有的Web服务和功能都工作得很好。以下是coffescript中的当前代码: $.fn.cascade = (urlGetter, paramGetter, callbacks)-> callbacks[type] = callbacks[type] || $.noop for type in ["success", "notF

我一直在构建一个小插件,以重用rails应用程序中的一些代码,根据父选择元素和ajax响应的值来构建和分解选择元素。在我开始将这些代码分离成可重用的代码之前,所有的Web服务和功能都工作得很好。以下是coffescript中的当前代码:

$.fn.cascade = (urlGetter, paramGetter, callbacks)->
  callbacks[type] = callbacks[type] || $.noop for type in ["success", "notFound"]
  url = urlGetter.call(this)
  eventParams = {url: url, paramGetter: paramGetter, callbacks: callbacks}
  this.on 'change', eventParams, displayDependent

getRequest = (url, data) ->
  $.ajax (
    method: 'GET'
    url: url
    dataType: 'json'
    data: data
  )

displayDependent = (event) ->
  url = event.data.url
  params = event.data.paramGetter()
  callbacks = event.data.callbacks
  getRequest(url, params)
    .done (data, textStatus, jqXHR) ->
      statusCode = jqXHR.status
      switch statusCode
        when 200
          callbacks["success"].call(this, data)
        when 204
          callbacks["notFound"].call(this, data) 
        else console.log 'Unexpected status code: ' + statusCode
    .fail (jqXHR, textStatus, errorThrown) ->
      console.log errorThrown
通过以下方式在选择器上调用:

$("someElement").cascade(urlGetter, paramGetter, callbacks)
因此,这适用于第一个更改事件。它使用预期的数据构建选择。第二次触发更改事件时,成功回调将在触发第一个更改事件时接收相同的数据,从而使用旧数据构建select


如何解决这个问题,使.done回调中的数据变量更改每个ajax请求?我很确定我把这些变量的范围搞砸了

解决方案:这是url,笨蛋。Ajax方法对每个更改事件都重复相同的请求。在阅读了闭包和怀疑相关问题之后,更清楚地看到随change event发送的url在内部定义时保持相同的值。我只需要处理发送UrlGetter而不是url到displayDependent,现在它可以正常工作了