麻烦通过ajax上下文传递/访问元素

时间:2016-05-07 07:51:42

标签: jquery

我已阅读有关context setting of jQuery.ajax()的文档。

当在ajax调用之外触发DOM操作时,DOM成功受到影响:

var element = $('#logo');
element.addClass('good');
console.log(element);
$.ajax({
  context: element,
  url: 'myfile.json',
  type:'get',
  dataType:'json',
  success: function(data) {    
    //reserved
  }
});

当我在ajax调用中移动DOM操作时,预期的结果显示在控制台输出中,但实际反映在DOM中:

var element = $('#logo');
$.ajax({
  context: element,
  url: 'myfile.json',
  type:'get',
  dataType:'json',
  success: function(data) {    
    $(this).addClass('good');
    console.log($(this));
  }
});
// [h1#logo.good, selector: "#logo", context: document]

我也试过引用'element'而不是$(this)而没有成功:

var element = $('#logo');
$.ajax({
  context: element,
  url: 'myfile.json',
  type:'get',
  dataType:'json',
  success: function(data) {    
    element.addClass('good');
    console.log(element);
  }
});
// [h1#logo.good, selector: "#logo", context: document]

控制台输出中的上下文是“文档”而不是“#logo”似乎很奇怪。在任何情况下,元素引用似乎都会在ajax调用中丢失。

我已经在similar question的已接受答案中尝试了所有这三种解决方案,但无济于事。

有什么想法吗?我要变灰了。

1 个答案:

答案 0 :(得分:0)

您显然错误openssl pkcs12 -export -in file.pem -out file.p12 context $.ajax() context jQuery()context。它们是不同的。

$.ajax()

$.ajaxSettings

  

上下文

     

类型:PlainObject

     

此对象将是所有与Ajax相关的回调的上下文。默认情况下,上下文是一个对象   表示调用中使用的Ajax设置($.ajax已合并   将设置传递给complete)。例如,指定DOM   元素作为上下文将使$.ajax({ url: "test.html", context: document.body }).done(function() { $( this ).addClass( "done" ); }); 的上下文   请求的回调,如下:

this

$.ajax()个回调中设置context个对象。 jQuery()

$()
  

上下文

     

键入:Element或jQuery

     

DOM元素,文档或jQuery   用作上下文

     

选择器上下文

     

默认情况下,选择器在DOM开始时执行搜索   在文档根目录。但是,可以给出替代上下文   使用可选的第二个参数到$( "div.foo" ).click(function() { $( "span", this ).addClass( "bar" ); }); 函数进行搜索。 >例如,要在事件处理程序中进行搜索,可以限制搜索:

click