javascript - AJAX 函数未从它调用的函数接收返回数据
问题描述
这有点难以解释,因为我不确定发生了什么。在我的这个 Django Web 项目的代码库中,我有一个自定义列表类来管理多个 LI 元素。该类有一个“查找”方法,该方法返回匹配字符串的 DOM 元素。
接下来,我有一个 AJAX 查询,它进行服务器端 python 调用来处理数据并调用我的响应函数。我有我的 python 脚本对列表中的每个项目运行分析,因此它正在进行后续的 AJAX 调用。我的 AJAX 的响应函数是从我的列表对象中调用“查找”方法,传递 AJAX 从我的 python 脚本接收的文本数据。
'find' 方法正在成功执行并返回正确的结果(或者更确切地说是“尝试”返回结果)。它在第一个项目上成功返回了一些东西,但之后的每个项目都是“未定义的”。我在“find”方法中的控制台日志在返回它之前给了我正确的返回对象,但是在调用“find”之后立即的日志给了我一些“未定义”的东西。
这是 AJAX 试图重复调用它的范围问题吗?
/* This is a large class, so I've omitted irrelevant members to the question. */
class UnorderedList{
constructor(){
this.__element = document.createElement("UL");
this.__listItems = [];
}
/* Creates a LI element for this list with the given string. */
addItem(str){...}
/* Returns the inner text of a LI element. */
getTextFromIndex(n){...}
/* Returns the LI element for the matching string. */
find(str){
function __find(str, listItems, n=0){
if(n >= listItems.length){
/* B: */ console.log("no results found for '"+str+"'");
return false;
}
if(str == listItems[n].innerText){
/* C: */ console.log("search successful");
var objLi = listItems[n];
/* D: */ console.log(objLi); // Gives the correct object everytime.
return objLi;
}
__find(str, listItems, ++n);
}
/* A: */ console.log("searching for '"+str+"'");
return __find(str, this.__listItems);
}
}
class Analyser{
constructor(){
/* Assume this list already contains data. */
this.__entityList = new UnorderedList();
}
analyse(n=0){
if(n >= this.__entityList.filterLength) return;
$.ajax({
type: "POST",
url: url,
data: {
csrfmiddlewaretoken: csrfToken,
textData: this.__entityList.getTextFromIndex(n),
nResults: MAX_RESULTS,
nIteration: n,
},
success: this.response.bind(this)
});
}
response(response){
var results = JSON.parse(response);
var objLi = this.__entityList.find(results.textData)
/* E: */ console.log(objLi); // Every item after the first is undefined.
this.analyse(Number(results.nIteration) + 1);
}
}
使用花括号表示 HTML 标签
控制台日志:
A: searching for "some text string"
C: search successful
D: {li style=""}
E: {li style=""}
A: searching for "some text string"
C: search successful
D: {li style=""}
E: undefined
A: searching for "some text string"
C: search successful
D: {li style=""}
E: undefined
解决方案
您错过了递归调用__find
函数中的 return 语句。
function __find(str, listItems, n=0){
// rest of your code
// you missed the return statement
return __find(str, listItems, ++n);
}
推荐阅读
- angular - Chrome 中的 Angular 6 PWA 504 错误。基础href问题?
- python - 在 Python 中逐行读取文件
- javascript - 根据条件自动选择单选按钮
- directx-11 - 不在 dx9 兼容模式下时禁用 DX9 风格的本质?
- python - 在 Pandas DatetimeIndex 中重新创建丢失的秒数 + 毫秒数
- javascript - 全局声明 forEach 并在函数中使用它
- select - 如何将自定义布尔查询添加到 influxDb
- sql - Parsing JSON file in Snowflake Database
- python - 使用python抓取时获取javascript变量值
- c - I don't know what is wrong with this loop parallelization