以下Ajax工作
function Retrieve(el) {
var table = this;
this.el = el;
this.fetchInfo = function () {
$.ajax('data.html', {
context: table,
<!-- QUESTION HERE -->
data: {
location: table.data('location')
},
success: function (response) {
this.el.find('.info').html(response).fadeIn();
},
}
}
但我想知道为什么我无法在所表示的行上用table.data
替换this.data
。由于我将上下文设置为table
变量,this
现在应该设置为table
所指的任何内容?这适用于Ajax对象的其他成员(包括success
)的上下文,但不适用于data
的成员。为什么会这样?
data('name')
从属性为data-name
答案 0 :(得分:1)
您提供的context
变量仅适用于success
回调,并且不会更改传递给$.ajax
的任何其他参数的任何内容。
因此,答案取决于您实际调用 fetchInfo
的方式。 data:
变量将在fetchInfo
具有的任何上下文中得到解决。鉴于您遇到问题,这表示您不使用Retrieve
对象作为其上下文调用该函数。
编辑这一行是你的问题:
this.el.on('click', 'button', this.fetchInfo);
仅仅因为您已经引用了this.fetchInfo
,在随后调用上下文时不会使this
成为上下文。试试这个:
this.el.on('click', 'button', $.proxy(this.fetchInfo, this));
答案 1 :(得分:0)
查看$.ajax()
的{{3}},我发现context
设置为callbackContext
变量。这可以使用success
,error
,beforeSend
,complete
,但不能使用data
选项。
AJAX选项被分配给名为s
的变量:
s = jQuery.ajaxSetup({}, options),
数据选项转换为字符串,但未使用callBackContext
。
// Convert data if not already a string
if (s.data && s.processData && typeof s.data !== "string") {
s.data = jQuery.param(s.data, s.traditional);
}
因此,有必要使用data
以外的变量设置this
的元素。