Javascript 更改时的Ajax不会覆盖上的数据。完成
我一直在构建一个小插件,以重用rails应用程序中的一些代码,根据父选择元素和ajax响应的值来构建和分解选择元素。在我开始将这些代码分离成可重用的代码之前,所有的Web服务和功能都工作得很好。以下是coffescript中的当前代码: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
$.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,现在它可以正常工作了