我有一个javascript函数,它是加载帮助菜单列表(下拉列表)。
第一个功能: GetPageKeyword()
function GetPageKeyword() {
var url = window.location.href.replace(window.location.origin, '').replace('/#', '').replace('#', '').replace('//', '/');
url = url.split("?")[0];
url = GetURL(url);
if (url.lastIndexOf('/') == (url.length - 1))
url = url.slice(0, -1);
if (url.indexOf('/') == 0)
url = url.substring(1, url.length);
$.ajax({
url: "/api/PageKeywords/GetLabelsByUrl",
type: 'Get',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
cache: false,
data: { url: url },
success: function (data) {
var res = data.data;
var htmlAppend = '<a id="hlpMenuLink" class="dropdown-toggle" data-toggle="dropdown"><i style="font-size: 17px;" class="fa fa-question-circle"></i></a>';
if (res.length > 0) {
$.getJSON("https://test.com/search.json?label_names=" + res[0].labels,
function (data) {
if (data.results.length > 0) {
htmlAppend += '<ul id="menuHelpUl" class="dropdown-menu pull-right">';
for (var i = 0; i < data.results.length; i++) {
htmlAppend += "<li><a href='" + data.results[i].html_url + "' target=\"_blank\">" + data.results[i].name + "</a></li>";
}
htmlAppend += "</ul>";
}
$('#helpMenu').html(htmlAppend);
});
}
$('#helpMenu').html(htmlAppend);
setTimeout(function () { GetArticulateDetails(); }, 1100);
},
error: function (jqXhr, textStatus, errorThrown) {
var err = jqXhr;
}
});
}
但现在我需要添加更多项目来帮助菜单。 在第二个函数中,我尝试将新项添加到我在第一个函数中构建的ul id =“menuHelpUl”。
第二项功能: GetArticulateDetails()
function GetArticulateDetails() {
var url = window.location.href.replace(window.location.origin, '').replace('/#', '').replace('#', '').replace('//', '/');
url = url.split("?")[0];
url = GetURL(url);
if (url.lastIndexOf('/') == (url.length - 1))
url = url.slice(0, -1);
if (url.indexOf('/') == 0)
url = url.substring(1, url.length);
$.ajax({
url: "/api/PageKeywords/GetArticulateLabelByUrl",
type: 'Get',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
cache: false,
data: { url: url },
success: function (data) {
var res = data.data;
var htmlAppend = '<hr/>';
if (res.length > 0) {
for (var i = 0; i < res.length; i++) {
htmlAppend += "<li><a href='../HelpMenu/" + res[i].location + "/" + res[i].articulateIdentifier.trim() + "/index.html' target=\"_blank\">" + res[i].name + "</a></li>";
}
}
$('#menuHelpUl').append(htmlAppend);
},
error: function (jqXhr, textStatus, errorThrown) {
var err = jqXhr;
console.log(err);
}
});
}
在成功响应的第一个函数GetPageKeyword中,我正在调用第二个函数
setTimeout(function () { GetArticulateDetails(); }, 1100);
这里我遇到问题某些情况下第二个功能无效,因为它可能无法找到#helpMenu的id。
代码:function:GetArticulateDetails: - $('#helpMenu')。html(htmlAppend);
所以在完成第一个函数之后,我将如何调用我的第二个函数。
答案 0 :(得分:1)
在你的第一个方法中调用
$('#helpMenu').html(htmlAppend)
应该在getJson(...)
的处理程序中目前在该方法完成之前调用它,但依赖于该异步回调生成的数据。
(我给你一个明确的代码更改,但很难在手机上编辑)
编辑 - 实际上上面的行是重复的。可以删除处理程序外部的那个。也许有重复的ID?
您还可以在更新Html后从getJson处理程序中调用第二个方法。
menuHelpUl仅在getJson中的调用返回某些数据时才存在。如果没有,就没有元素。
答案 1 :(得分:1)
尝试在ajax成功回调结束时调用第二个函数:
fhand=open(romeo.txt)
arr=list()
count=0
for line in fhand:
words=line.split()
if words in arr:
continue
else:
arr=arr+words
arr.sort()
print(arr)
此外,也许有必要通过
来保护这个电话$.ajax({
/* settings */
success: function (data) {
var res = data.data;
var htmlAppend = '<a id="hlpMenuLink" class="dropdown-toggle" data-toggle="dropdown"><i style="font-size: 17px;" class="fa fa-question-circle"></i></a>';
if (res.length > 0) {
$.getJSON("https://test.com/search.json?label_names=" + res[0].labels,
function (data) {
if (data.results.length > 0) {
htmlAppend += '<ul id="menuHelpUl" class="dropdown-menu pull-right">';
for (var i = 0; i < data.results.length; i++) {
htmlAppend += "<li><a href='" + data.results[i].html_url + "' target=\"_blank\">" + data.results[i].name + "</a></li>";
}
htmlAppend += "</ul>";
}
$('#helpMenu').html(htmlAppend);
GetArticulateDetails(); // here !
});
}
$('#helpMenu').html(htmlAppend);
}
});
答案 2 :(得分:1)
使用javascript中的promises尝试此解决方案:
rates=as.numeric(gsub(",", ".", gsub("%", "e-2", rates)))
这样称呼:
function GetPageKeyword() {
return new Promise((resolve, reject)=>{
//your code here
resolve();
});
}
function GetArticulateDetails() {
return new Promise((resolve, reject)=>{
//your code here
resolve();
});
}
这是编辑的第一个函数:
GetPageKeyword().then((result)=>{
GetArticulateDetails();
}).catch((error)=>{
//handle error
});
答案 3 :(得分:1)
将menuHelpUl声明为这样的ui元素:
var menuHelpUl = $('<ul id="menuHelpUl" class="dropdown-menu pull-right">');
并在循环中将li元素附加到它
var li = $("<li><a href='" + data.results[i].html_url + "' target=\"_blank\">" + data.results[i].name + "</a></li>");
menuHelpUl .append(li);
现在将menuHelpUl传递给ajax成功的GetArticulateDetails:
GetArticulateDetails(menuHelpUl);
并在ajax成功中使用它
menuHelpUl.append(htmlAppend);
答案 4 :(得分:0)
看起来 $('#helpMenu')
是空的或未定义的。
尝试检查 $('#helpMenu')
的 null 或取消发现状态
**if($('#helpMenu') == null || $('#helpMenu') == undefined)**
然后执行追加html操作。
答案 5 :(得分:0)
您可以使用jquery.when
$.when(GetPageKeyword()).then(GetArticulateDetails());