2013-03-27 78 views
0
$(this).find(':submit').attr('disabled',true); 
     $.ajax(
     { 
      url:'/enviarSugerenciaMessageBoard', 
      cache: false, 
      type: 'POST', 
      data: $(this).serialize(), 
      success: function(success) 
      { 
       if(success=='Envio correcto') 
       { 
        console.log('Envio correcto'); 
        $(this).find(':submit').attr('disabled',false); 
       }else{ 
        console.log('Error en el envio'); 
        $(this).find(':submit').attr('disabled',false); 
       } 
      } 
     }); 

这个AJAX查询工作正常的问题是,当我从服务器获取“Envio correcto”,在控制台我得到Envio correcto但ATTR禁用虚假不工作...AJAX查询错误

我尝试甚至在异步做出像追加或预先准备,但没有工作

成功的其他功能:假

+0

'this'里面的回调指的是ajax对象,而不是你之前的'this'。另外,我建议你使用'prop()'而不是'attr()'来'disable'元素。 – Jashwant 2013-03-27 02:38:58

回答

2

因为this关键字未成功函数不再属于该元素。您应该将此变量备份到另一个变量,而不是您可以使用的变量。

这样,

$(this).find(':submit').attr('disabled',true); 
var self = this; 
     $.ajax(
     { 
      url:'/enviarSugerenciaMessageBoard', 
      cache: false, 
      type: 'POST', 
      data: $(this).serialize(), 
      success: function(success) 
      { 
       if(success=='Envio correcto') 
       { 
        console.log('Envio correcto'); 
        $(self).find(':submit').attr('disabled',false); 
       }else{ 
        console.log('Error en el envio'); 
        $(self).find(':submit').attr('disabled',false); 
       } 
      } 
     }); 
+0

很棒!这是为什么????你能解释我为什么我的代码不工作 – andrescabana86 2013-03-27 02:36:40

2

里面的success回调,this是不是它是从那里你叫.ajax()。要控制到回调内部的this值,你可以使用.ajax()

context选项在你的情况,你需要做的是:

$.ajax({ 
    context: this, // what you wnat `this` to be inside success 
    url:'/enviarSugerenciaMessageBoard', 
    ... 
    success: function(success) { 
     // 'this' is what you passed in via context 
    }); 

文档:http://api.jquery.com/jQuery.ajax/ - 向下滚动看到context选项

+0

这就是我所喜欢的SO。你总是学习新事物。感谢'context' :) – Jashwant 2013-03-27 02:45:12