如果ajax中的else语句调用不起作用

时间:2014-11-17 02:19:14

标签: jquery ajax

出于某种原因,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语句,但没有运气。

不确定为什么这不起作用。请帮忙,谢谢!

3 个答案:

答案 0 :(得分:1)

您的ifelse分支机构不可能在同一个呼叫中执行 ,这意味着您向服务器发出多个请求并获得多个结果

这很可能是因为您每次用户输入的文本发生更改时都会发送请求。您需要使用与Debouncing JavaScript Methods中描述的技术类似的技术去除请求。如果用户在未完成服务器请求时键入了一些文本,则还需要在发送新请求之前取消所有待处理的请求。

正确处理所有这些可能很棘手,所以我建议使用许多预构建的jQuery插件之一来执行此任务:

答案 1 :(得分:1)

基于您正在调用外部API这一事实,我认为返回的对象没有&#34;状态&#34;属性在根级别,因此data.status将始终返回nil。如果是这种情况,您的第一个条件if (data.status == "success")将始终评估为false,并且条件的第二部分将进行评估。 使用console.logdebugger可以更好地了解您返回的对象包含的内容,然后重新考虑条件。

答案 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>");
    }
  }
});