“this”在以下javascript中引用了什么?

时间:2011-06-30 23:40:13

标签: javascript jquery this

免责声明:我问的是this的具体用法,而不是this一般使用的用途。所以,请不要谷歌/复制/粘贴速度答案(:

我有以下的javascript / jquery代码:

var req = {};

function getData()
{
    var fromPage = 0;
    var toPage = 1;

    req = $.ajax({
                    url: "/_vti_bin/lists.asmx",
                    type: "POST",
                    dataType: "xml",
                    data: xmlData,
                    complete: onSuccess,
                    error: function (xhr, ajaxOptions, thrownError) {
                        alert("error: " + xhr.statusText);
                        alert(thrownError);
                    },
                    contentType: "text/xml; charset=\"utf-8\""
                });

     req.fromPage = fromPage;
     req.toPage = toPage;
}

function onSuccess(resp) {
    alert(this.fromPage);
}

我发现代码在两个地方使用fromPage非常令人困惑(对不起我的代码)。

this是否引用getData内部声明的var或req对象中的var?或者完全是其他东西......

任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:5)

根据jQuery.ajax文件:

  

所有回调中的this引用是在设置中传递给$ .ajax的context选项中的对象;如果未指定context,则这是对Ajax设置本身的引用。

换句话说,由于您未设置context选项,this将作为参数传递给{...}的选项对象$.ajax

您发布的代码似乎错误:它从错误的对象中读取fromPage。如果您在选项对象上设置fromPage,它将起作用:

req = $.ajax({
    //other options here...
    fromPage: fromPage
});

答案 1 :(得分:2)

onSuccess()在ajax请求的上下文中从complete处理程序调用,该请求被分配给req对象,因此this就是该上下文 - 即req对象,而fromPage实际上是req.fromPage

答案 2 :(得分:0)

我相信this指的是req.fromPage,因为那是包含被调用函数的对象。