【问题标题】:Ajax: Undefined value for ajax success [closed]Ajax:ajax成功的未定义值[关闭]
【发布时间】:2019-07-16 19:57:38
【问题描述】:

my ajax 结果运行良好,但现在卡在了一些查询上。我正在从 youtube 上抓取数据,并给出了 youtube videoID。但它没有显示任何东西。 就像我的网址是http://localhost:8080/search/6uymnYvAUKM 一样,它会显示未定义的结果,但是当我使用一些关键字搜索时,它可以完美运行。基本上我正在从 youtube 抓取结果。它是一个 youtube 视频 ID。当我搜索其他单词时,它会起作用。

function search_Q() {
    //alert("base url");
    var query_search = '{{Query}}';
    //alert(query_search);
    var q = query_search;//$("#q").val();
    alert(q);
    if (q) {
      $.ajax({

        url: "/api/search",
        data: { q: q },
        type: "GET",
        dataType: "json",
        beforeSend: function () {
          $("#loading_img").css('display', 'inline');
          $("#result").empty();
        },
        success: function (result1) {
          var event_data = '';
          var title;

          //alert(check);
          for (var i = 0; i <= 14; i++) {
            if (typeof result1[i]['video']['id'] != 'undefined') {
              event_data += '<div class="col-xs-6 col-sm-4 col-md-3">';
              event_data += '<div class="thumbnail">';
              event_data += '<a class="item-thumbnail" style="position: relative"  target="_blank" href='+base_url+'download/' + result1[i]['video']['title_url'] + '/' + result1[i]['video']['id'] + '>';
              event_data += '<img class="ythumbnail" ' + 'src=' + result1[i]['video']['thumbnail_src'] + '> </a>';
              event_data += '<div class="search-info">';
              event_data += '<a  target="_blank" href='+base_url +'download/' +result1[i]['video']['title_url'] + '/' + result1[i]['video']['id'] + '>' + result1[i]['video']['title'] + ' </a>';
              event_data += '<p> <a class="btn btn-success btn-xs" target="_blank"  href='+base_url +'download/' + result1[i]['video']['title_url'] + '/' + result1[i]['video']['id'] + '>';
              event_data += '<i class="glyphicon glyphicon-download-alt"></i>&nbsp; Download video</a> </p> <br> </div></div></div>';
            }
          }
          $("#loading_img").css('display', 'none');
          $("#result").append(event_data);


        },
        error: function (jqxhr, status, exception) {
          alert('Sorry Try Again.', exception);
        },
        always: function (xhr, status) {
          alert("The request is complete!");
        }
      });
    }
  }

我的路由器代码

router.get('/search/:query', function (req, res) {

  var q = req.params.query;


    res.render('index', {
      Query: q
    });


});

PS:如果大家能帮忙,我将非常感激。谢谢。

【问题讨论】:

  • 您期待什么帮助?我们看不到您的数据,我们不知道您的 API 是什么,我们没有任何东西可以用来了解哪些搜索有效和失败等等。请参阅How to Ask 页面。
  • 您的问题似乎与您提供的代码完全无关。
  • @adamwood 如果您的 console.log(result) 在您的 ajax 函数之外,它将始终未定义,因为是异步调用,请尝试使用延迟方法 .done()、.then()或承诺
  • 您的循环被硬编码为循环 14 次。当您按 id 搜索视频时,根据定义,您将获得 id 引用的 one 视频,因此当您的循环进入第二次迭代时,它将失败。
  • @adamwood Nosyara 的答案非常接近,只需删除第一个条件result1 &amp;&amp;。如果没有result1[i],这将允许它静默跳过

标签: jquery arrays ajax


【解决方案1】:

当您按搜索词搜索时,您会得到 1 到 n 个结果,但是,当您按视频 ID 搜索视频时,您总是会得到 1 或 0 个结果。您的成功回调中的 for 循环循环了 15 次,因此如果结果少于 15 个,则一旦处理返回的结果数量并继续处理第一个未定义的结果,它将失败。

要解决此问题,请修改您的循环,使其循环次数不会超过结果,或者更改循环内的条件,使其在 result1[i] 未定义时不检查 result1[i]['video']

如果您的目标是输出最多 15 个结果,我只需修改循环条件,使其停止在 15 或 result1.length,以较小者为准。

for (var i = 0; i <= Math.min(14, result1.length-1); i++) {

【讨论】:

    【解决方案2】:

    这个错误很可能是因为你没有检查 result1。 换行:

    if (typeof result1[i]['video']['id'] != 'undefined') {
    

    if (result1 && result1[i] && result1[i]['video'] && typeof result1[i]['video']['id'] != 'undefined') {
    

    【讨论】:

    • 感谢您的帮助,但没有成功,还是一样。 :(
    猜你喜欢
    • 1970-01-01
    • 2013-03-14
    • 1970-01-01
    • 2021-04-06
    • 1970-01-01
    • 2022-11-20
    • 2023-01-23
    • 1970-01-01
    • 2020-04-23
    相关资源
    最近更新 更多