gpt4 book ai didi

javascript - 无法获取未定义或空引用的属性 - Windows 8 JS/CSS 应用程序

转载 作者:数据小太阳 更新时间:2023-10-29 05:08:20 26 4
gpt4 key购买 nike

下面是我的代码片段。我得到的错误是,当我执行搜索并调用方法 _searchData 时,它成功调用了方法 _lookUpSuccess,但随后返回以下错误:

JavaScript 运行时错误:无法获取未定义或空引用的属性“_displayResult”

当它尝试调用 _displayResult 方法时。

为什么会这样?

(function () {

// make this an object property/method eventually
var displayResult = function (queryResult) {
for (var i = 0; i < holder.length; i++) {
//document.querySelector(".item-content .title").textContent = "FilmApp";
document.querySelector(holder[i]).textContent = queryResult[i];
}};

// Creates a new page control with members
ui.Pages.define(searchPageURI, {
//...
_searchData: function (queryText) {
searchBase = 'http://www.example.com/web-service2.php?termID=';
searchFormat = 'JSON';
searchFormatPiece = '&format=' + searchFormat;

if (!window.Data) {
var searchUrl = searchBase + queryText + searchFormatPiece;
WinJS.xhr({ url: searchUrl }).done(this._lookUpSuccess, this._lookUpFail, this._lookUpProgress);
}else{
document.querySelector(".titlearea .pagetitle").textContent = "There has been a computer malfunction - sort it the **** out!";
}
},

_lookUpSuccess: function xhrSucceed(Result) {
var response = JSON.parse(Result.responseText);
if (response.response[0].Message === "Found") {
for (var x in response.response[1].term) {
content.push(response.response[1].term[x]);
};
this._displayResult(content);
//displayResult(content);
return content;
} else {
content.push("Not Found", "Not Found");
return content;
}
},

_lookUpFail: function xhrFail(Result) { document.querySelector(".titlearea .pagetitle").textContent = "Got Error"; },
_lookUpProgress: function xhrProgress(Result) { document.querySelector(".titlearea .pagetitle").textContent = "No Result 2"; },

_displayResult: function (queryResult) {
var holder;
holder = [DefDiv, DescDiv];

for (var i = 0; i < holder.length; i++) {
//document.querySelector(".item-content .title").textContent = "FilmApp";
document.querySelector(holder[i]).textContent = queryResult[i];
};
},

});

// End of UI.page.define

// #2 This method is run on application load
WinJS.Application.addEventListener("activated", function (args) {
if (args.detail.kind === appModel.Activation.ActivationKind.search) {
args.setPromise(ui.processAll().then(function () {
if (!nav.location) {
nav.history.current = { location: Application.navigator.home, initialState: {} };
}
return nav.navigate(searchPageURI, { queryText: args.detail.queryText });
}));
}
});

// #3
appModel.Search.SearchPane.getForCurrentView().onquerysubmitted = function (args) { nav.navigate(searchPageURI, args); };

})();

最佳答案

在这行代码中:

WinJS.xhr({ url: searchUrl }).done(this._lookUpSuccess, this._lookUpFail, this._lookUpProgress);

您正在将 _lookupSuccess 作为完成处理函数传递,但是当它被调用时,this 的值不再是您想要的值,因为那将是由任何调用完成处理程序的内部设置。传递 this._lookUpSuccess 作为函数只是传递函数。它不传递 this 的值。因此,当使用错误的 this 调用 this._lookUpSuccess 时,对其中的 this 的任何引用都不会在其上找到预期的属性(因此你看到的错误)。

您可以像这样修复它,将 this 值保存在局部变量中,然后在调用 _lookUpSuccess() 时使用它:

var self = this;
WinJS.xhr({ url: searchUrl }).done(function(result) {self._lookUpSuccess(result)}, this._lookUpFail, this._lookUpProgress);

这是在回调中重新附加正确的 this 值的一种非常常见的解决方法。

关于javascript - 无法获取未定义或空引用的属性 - Windows 8 JS/CSS 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14210765/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com