出于某种原因,if else声明我必须清除错误的api搜索并没有完成它的工作。 ajax请求将返回no-results消息div ALONG with the right search result。
当实际上没有结果时,它似乎过滤好了并显示消息。
这里是ajax请求以及成功逻辑:
$.ajax({
url: "apis/api",
type: "get",
dataType: "json",
success: function(data) {
if (data.status == "success") {
$("#results").html(data);
} else {
$("#results").html("<div class='no-results'>No matches.</div>");
}
}
});
我也尝试过这个成功模块,它实际上没有达到其他条件:
success: function(data) {
if ($(document).ajaxSuccess()){
$("#results").html(data);
} else {
$("#results").html("<div class='no-results'>No matches.</div>");
}
}
我尝试用!=来反转if else语句,但没有运气。
不确定为什么这不起作用。请帮忙,谢谢!
答案 0 :(得分:1)
您的if
和else
分支机构不可能在同一个呼叫中执行 ,这意味着您向服务器发出多个请求并获得多个结果
这很可能是因为您每次用户输入的文本发生更改时都会发送请求。您需要使用与Debouncing JavaScript Methods中描述的技术类似的技术去除请求。如果用户在未完成服务器请求时键入了一些文本,则还需要在发送新请求之前取消所有待处理的请求。
正确处理所有这些可能很棘手,所以我建议使用许多预构建的jQuery插件之一来执行此任务:
答案 1 :(得分:1)
基于您正在调用外部API这一事实,我认为返回的对象没有&#34;状态&#34;属性在根级别,因此data.status
将始终返回nil
。如果是这种情况,您的第一个条件if (data.status == "success")
将始终评估为false,并且条件的第二部分将进行评估。
使用console.log
或debugger
可以更好地了解您返回的对象包含的内容,然后重新考虑条件。
答案 2 :(得分:0)
我不知道您的HTML是什么样的,但似乎您可能需要将get
更改为post
。由于您还使用json
,似乎需要在json数据数组中指定正确的密钥。
与您的data.status
类似,您的HTML应该类似于data.html
。
$json = array('status' => 'success', 'html' => '<div>Some HTML</div>');
echo json_encode($json);
假设您使用的是PHP。
$.ajax({
url: "apis/api",
type: "post",
dataType: "json",
success: function(data) {
if (data.status == "success") {
$("#results").html(data.html);
} else {
$("#results").html("<div class='no-results'>No matches.</div>");
}
}
});