';这';在jquery(ajax)中不起作用
我正在使用ajax更新数据库中的值。 我得到了ajax形式的响应,但是$(this).val()工作不正常 看看我的ajax调用';这';在jquery(ajax)中不起作用,jquery,arrays,ajax,Jquery,Arrays,Ajax,我正在使用ajax更新数据库中的值。 我得到了ajax形式的响应,但是$(this).val()工作不正常 看看我的ajax调用 jQuery(document).ready(function(){ jQuery(".time_allocation_button").keyup(function(){ //$(this).val('123'); //testing & working var re = ""; var data
jQuery(document).ready(function(){
jQuery(".time_allocation_button").keyup(function(){
//$(this).val('123'); //testing & working
var re = "";
var data = {};
data['time_allocation'] = jQuery(this).val();
data['task_id'] = jQuery(this).data('task_id');
data['project_id'] = jQuery(this).data('project_id');
$.ajax({
url: "<?php echo base_url('project/add_time_frame_to_project_task');?>",
type: "POST",
dataType: 'json',
data: data,
success: function(data){
if(data.type == 'error'){
$("#time_frame_error").html('<div class="callout callout-danger bg-red">'+ data.msg + '</div>');
$(this).val(data.reset_value); //not working
alert(data.reset_value); // working
}else{
$("#time_frame_error").html('<div class="callout callout-success bg-green">'+ data.msg + '</div>');
}
},
error: function(){
}
});
});
});
jQuery(文档).ready(函数(){
jQuery(“.time\u allocation\u button”).keyup(函数(){
//$(this.val('123');//测试和工作
var re=“”;
变量数据={};
data['time_allocation']=jQuery(this.val();
data['task_id']=jQuery(this.data('task_id');
data['project_id']=jQuery(this).data('project_id');
$.ajax({
url:“”,
类型:“POST”,
数据类型:“json”,
数据:数据,
成功:功能(数据){
如果(data.type=='error'){
$(“时间帧错误”).html(“”+data.msg+“”);
$(this.val(data.reset_value);//不工作
警报(data.reset_值);//正在工作
}否则{
$(“时间帧错误”).html(“”+data.msg+“”);
}
},
错误:函数(){
}
});
});
});
在普通JavaScript中,每个函数调用都会创建自己的上下文变量(即this
),除非采取特殊措施,否则嵌套内部函数中的列表将与外部函数中的列表不同
最简单的解决方案是将外部this
及其jQuery对象一起分配为$this
,然后在内部回调中使用该变量:
jQuery(...).keyup(function() {
var $this = $(this);
...
$.ajax({
success: function() {
$this.val(...) // uses the variable from the outer scope
...
});
});
...
});
您在内部调用中丢失了$$(this)
,您应该使用类似$this
的东西来保留它
jQuery(document).ready(function() {
jQuery(".time_allocation_button").keyup(function() {
var $this = $(this)
//...
success: function(data) {
///...
$this.val(data.reset_value);
success函数有自己的上下文和自己的this(函数本身)
你必须使用闭包
jQuery(".time_allocation_button").keyup(function(){
var that = this;
// ...
$.ajax({
// ...
success: function(data){
$(that).val(data.reset_value); //not working
此
的值会根据调用的范围而变化。直接在keyup
处理程序中,它引用元素,而在ajax调用的success
回调中,它不引用元素
解决方案是将引用缓存在success
回调之外,并在其中使用它
jQuery(".time_allocation_button").keyup(function(){
var $button = $(this);
....
$.ajax({
....
success: function(){
$button.val("123");
}
....
)
....
});
使用$的相关ajax选项。ajax
方法可设置相关上下文,否则ajax回调中的上下文将设置为ajax选项对象:
$.ajax({
context: this, /*...*/
});
存储为var\u this=this,在ajax之前call@HarpreetSingh我仍然不确定是否看到了下面所有的Anwser并阅读了您的评论,为什么人们不使用相关的$.ajax
选项context:this
@A.Wolff,我可以承认,我已经习惯了它,而且我不知道没有var
,$this
,context
标志是不会起作用的,因为$this
不会是一个完结,它肯定会起作用,但前提是不存在同时进行的多个调用或任何其他重复使用该变量的情况。不过,这仍然不是一个好主意!如果直接使用$.ajax
,这确实是一个很好的解决方案,但在使用$等包装器方法时,它不可用。get
啊,这是jQuery 3.0中的新功能(但在早期版本中可能没有文档记录),但在jq 2.2中可以使用@Alnitak它,但是现在检查文档,您是正确的,也就是说,它是在JQ3.0中添加的。在旧版本上,可以使用全局ajax对象选项,但。。。实际上,在这种情况下,只需设置一个ref变量就更具可读性