Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
';这';在jquery(ajax)中不起作用_Jquery_Arrays_Ajax - Fatal编程技术网

';这';在jquery(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

我正在使用ajax更新数据库中的值。 我得到了ajax形式的响应,但是$(this).val()工作不正常

看看我的ajax调用

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变量就更具可读性