如何使用';这';在angular中的Ajax调用中
一旦我从Ajax调用中得到响应,我就尝试使用“this”。 但“这”似乎没有定义。我发现很少有文章使用“绑定”,但我不确定如何实现绑定 在ajax调用中使用“this”没有任何问题。我从后端得到了预期的响应如何使用';这';在angular中的Ajax调用中,ajax,angular,this,Ajax,Angular,This,一旦我从Ajax调用中得到响应,我就尝试使用“this”。 但“这”似乎没有定义。我发现很少有文章使用“绑定”,但我不确定如何实现绑定 在ajax调用中使用“this”没有任何问题。我从后端得到了预期的响应 saveCart(data: any): void { let body: any = {} body.data = data body = JSON.stringify(body) // the 'this' works here as expected.
saveCart(data: any): void {
let body: any = {}
body.data = data
body = JSON.stringify(body)
// the 'this' works here as expected.
let config = this.config.getHeaders() as any
$.ajax({
url: environment.domain + '/cart',
type: "POST",
headers: config,
data: body,
contentType: "application/json",
dataType: "json",
async: false
}).done(function (response) {
// The 'this' below is undefined **********
this.profileService.logout().subscribe(result => {
console.log('User was logged out', result)
})
})
}
更新:有几个人问我为什么不使用httpClient
当用户关闭浏览器时调用此函数。使用angular的httpclient将浏览器(繁重的后端代码)冻结几秒钟,然后关闭。所以选择了ajax调用
下面是我在其他地方使用的代码,使用的是angular httpClient
this.http.post(environment.domain + url, body, options)
.pipe(retryWhen(this.config.handleRetry))
.pipe(catchError(this.config.handleError))
试试这个
saveCart(data: any): void {
/* Other code */
var that = this;
$.ajax({
url: environment.domain + '/cart',
type: "POST",
headers: config,
data: body,
contentType: "application/json",
dataType: "json",
async: false,
success:function(response){
//The 'this' below is undefined **********
that.profileService.logout().subscribe(result => { console.log('User was logged out', result) })
}
})
试着用这种方式
选项1
在Ajax调用之前,设置一个新变量
var that = this;
现在您可以使用那个
来代替这个。它的工作原理与此相同
选项2
您可以尝试使用ES6
语法。我没有尝试过Ajax,但我经常在代码中使用它,它对我来说很好
$.ajax({
url: environment.domain + '/cart',
type: "POST",
headers: config,
data: body,
contentType: "application/json",
dataType: "json",
async: false,
success:(() =>{ <----------------Hear is the change
this...
}) =>{
}
})
$.ajax({
url:environment.domain+'/cart',
类型:“POST”,
标题:config,
资料来源:body,
contentType:“应用程序/json”,
数据类型:“json”,
async:false,
成功:(()=>{
}
})
如果是Angular,那么您使用jQuery而不是Angular自己的HttpClient来进行HTTP调用的原因是什么?您可以添加如何使用HttpClient吗?这将是一种比jQuery的AjaxOnly更好的方法。只有在这种特殊情况下,我必须使用Ajax调用。其他任何地方都在使用HttpClient。所有这些都按预期工作ed.使用arrow函数语法,您就可以访问它。另外,技术上,您只需要调用一次.pipe
,并且您可以将retryWhen和catchError等多个运算符作为参数:.pipe(retryWhen(…),catchError(…)
不起作用。已尝试“that”您是否尝试了成功回拨而不是完成?请检查更新的答案。可能是语法错误,因为我已通过手机进行了更新。因此,为了防止语法错误,请相应地解决它。尝试了成功。没有任何区别。您能否创建一个要点或小提琴并共享它我可以测试它。这通常对所有人都有效。所以我这边有一点。我分享了相同的解决方案。但它不符合提出问题的人的要求。就个人而言,这是不可能的。可能是错误在其他地方。你怎么想?是的,第一个解决方案是相同的,但我也给出了另一个选择。我两者都在使用在我的代码中每天都有。我想这可能是代码中的一些小问题。我希望它能起作用。但不要担心,我们双方的答案都是正确的。:)编码愉快。让我们看看会发生什么。@JavaQuest有关于您的问题的更新吗?