Ajax on Change不会覆盖.done上的数据
Ajax on Change doesn't overwrite data on .done
我一直在构建一个小的"插件"来重用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
,现在它像预期的那样工作。
相关文章:
- 用程序搜索JQuery数据表中的文本
- 要求输入在数据列表中
- 正在将数据主题添加到所有项目
- 函数参数中的数据与指定变量之间的任何性能差异
- 在VanillaJS中模拟模型双向数据绑定
- CSS-如何定位内容数据标题
- 使用电话间隙在Android应用程序中显示SQL Lite的数据
- 无法在数据endVal中设置值=“”;{{ucount}}”;使用Angular JS的CountUp
- 序列化数据属性中对象的最可靠方法
- 如何将JSON数据导入我的ejs模板
- 不显示带有本地json文件数据的谷歌地图脚本
- 如何将json数据显示为html
- 画布数据到图像
- 使用jquery将mysql数据获取到新的表行中
- Ajax.done()没有数据
- $.post.done回调未启动,但数据已发布到服务器
- return ajax.done数据在jquery上出现错误
- 如何在使用$.post发送&将数据与done&故障功能
- Ajax on Change不会覆盖.done上的数据
- jquery延期.Done:将数据数组传递给Done方法