jquery - Ajax:ajax 成功的未定义值
问题描述
我的 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> 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:如果有大神帮忙,我将不胜感激。谢谢。
解决方案
当您按搜索词搜索时,您会得到 1 到 n 个结果,但是,当您按视频 ID 搜索视频时,您总是会得到 1 或 0 个结果。成功回调中的 for 循环循环 15 次,因此如果结果少于 15 个,则一旦处理返回的结果数量并继续处理第一个未定义的结果,它将失败。
要解决此问题,请修改您的循环,使其循环次数不会超过结果,或者更改循环内的条件,使其不检查result1[i]['video']
是否result1[i]
未定义。
如果您的目标是输出最多15 个结果,我只需修改循环条件,使其停止在 15 或result1.length
,以较小者为准。
for (var i = 0; i <= Math.min(14, result1.length-1); i++) {
推荐阅读
- c - 没有得到想要的输出,数字没有四舍五入
- ios - MTLCreateSystemDefaultDevice 在 iOS 13 模拟器上返回 nil
- phpunit - 使用 Panther 进行 HTTP 身份验证
- python - 为什么我遇到值错误 - (randrange 为空范围)
- azure-blob-storage - powershell \ portal \ cli 命令应该是什么,以查看某个 blob 的当前权限是什么
- javascript - 为什么比较无效数字的字符串值有效?
- javascript - forEach 遍历对象并使用 document.write() 打印;
- android - 如何在每个项目中使用 EditText 实现 Recyclerview 并使用 SearchView 过滤列表?
- go - 如何在 Proto3 中为 HTTP 响应创建可空字段?
- angular - 我如何告诉 Angular 安装 Clarity 模块的一个子集?