jquery在ajax请求中丢失了$(this)值
jquery losing value of $(this) on ajax request
嗨,我正在使用jquery向数据库发出ajax请求,以便从数据库中添加和删除收藏夹。这很好,但我想替换锚链接中的href的一部分,这样用户就可以在需要时再次添加/删除,而无需刷新页面,例如链接就是这样构建的http://article.local/favourite/delete/uniqueid因此,我需要将"删除"替换为"添加",反之亦然。然而,我不能使用类名,否则这将应用于所有类,而不是当时单击的类。
$( ".remove-favourite" ).click(function(e) {
e.preventDefault();
var favform = $(this).parent('.fav-form-contents');
$(favform).append("<img src='/images/loading.gif' class='form-loader' class='loading-icon'/>");
$.ajax({
type : "POST",
cache : false,
url : $(this).attr('href'),
data : $(this).serialize(),
success : function(data) {
$('.loading-icon').hide();
$(this).attr('href').replace(/delete/, 'add');
$(this).removeClass('remove-favourite').addClass('add-favourite');
}
})
}); // end click function
然而,我得到的错误消息如下:
Uncaught TypeError: Cannot read property 'replace' of undefined
这表明它已经丢失了当前项目,有没有关于我做错了什么的想法??
您需要将$(this)
保留在一个变量中,以便像一样进行回调
var $link = $(this);
$.ajax({
type : "POST",
cache : false,
url : $(this).attr('href'),
data : $(this).serialize(),
success : function(data) {
$('.loading-icon').hide();
$link.attr('href').replace(/delete/, 'add');
$link.removeClass('remove-favourite').addClass('add-favourite');
}
})
this
本身将发生更改,因为$.ajax
中success
回调的执行上下文与调用$.ajax
时不同。
将this作为函数的全局均值
类似var _this = $(this)
在ajax suuceess 中的使用
this
与xhr
对象相关。
使用ajax、的context
选项
该对象将是所有与Ajax相关的回调的上下文。默认情况下,上下文是一个表示Ajax设置的对象
$.ajax({
context:this,
....
相关文章:
- jQuery使用ajax自动完成问题-TypeError:this.source不是函数
- 为什么我不能在 ajax 成功中访问 $(this)
- AJAX 请求没有在我的 React 组件中设置 this.state.data
- 在jQuery中,我如何从$.ajax回调函数访问$(this)
- 未捕获的类型错误:this.reset不是函数-在ajax调用后清空输入时出错
- JQuery $(this) 在 ajax POST 之后无法访问
- Jquery $.ajax 获取响应与将“this”对象嵌套传递到“success”回调函数冲突
- $(this).find(“.text”)和(“.loading”)在AJAX成功函数内部不起作用
- 带有Ajax表单的jQueryUI对话框获胜't用$(this).对话框关闭(“关闭”);
- jQuery点击传递(this)到ajax成功函数中
- 未捕获的类型错误:this.$.AjaxPost.go不是一个以函数为核心的ajax
- Ajax -在$(this)内更改HTML标记
- 在方法中的 ajax 调用中使用“this”关键字的解决方案
- ES6 /反应“this"关键字用ajax从服务器获取数据(教程)
- 在Jquery Ajax中使用选择器和$(this)
- 在Ajax中,当不在对象上下文中时使用$this
- Ajax.BeginForm JavaScript回调参数导致$(this)引用窗口而不是窗体
- Bind (this)在ajax成功函数上不起作用
- Typescript + Jquery Ajax + this
- jQuery ajax成功不能与$(this)一起工作