【发布时间】:2020-07-05 10:43:27
【问题描述】:
TLDR
目标
使用 jQuery 和 GitLab API 在用户更改时和提交表单之前验证 select 值的标头信息。
流程
- 用户从
select中选择一个类opt0的值。 -
onchange调用 jQuery。 - jQuery 验证 URL 是否存在(并最终将继续验证数组的详细信息)。
- jQuery 将现有 URL 的数组返回给 Chrome 开发者控制台(暂时)。
- jQuery 最终将返回无效 URL 作为控制台消息或
alert()。
实际结果
控制台报告找不到有效 URL 的项目。
选择每个值会产生以下控制台信息:
- xxxxxx:
(9) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}] - yyyyyyy:
jquery.min.js:2 GET https://gitlab.com/api/v4/projects/yyyyyyy/repository/tree 404 (Not Found) - zzzzzz:
jquery.min.js:2 GET https://gitlab.com/api/v4/projects/zzzzzzz/repository/tree 404 (Not Found)
请记住,所有 URL 都是有效的,并且包含我要查找的正确数组数据。
预期结果
我的期望是,由于一个 URL 可以正常工作,因此所有 URL 都应该正常工作,因为它们都是有效的 URL。以下是期望结果的示例:
- xxxxxx:
(9) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}] - yyyyyyy:
(3) [{…}, {…}, {…}] - zzzzzz:
(5) [{…}, {…}, {…}, {…}, {…}]
错误
返回的错误信息:
-
{"message":"404 Project Not Found"}。 jquery.min.js:2 XHR failed loading: GET https://gitlab.com/api/v4/projects/xxxxxxx/repository/treejquery.min.js:2 XHR failed loading: GET https://gitlab.com/api/v4/projects/yyyyyyy/repository/tree
我已登录 gitlab,所以身份验证不应该是问题。
已尝试
$.load()- 结果相同。$.ajax()- 结果相同。$.get()- 显示错误。我想我会选择这个,因为它很简单。parseInt(this.value)- 结果相同。var url = encodeURIComponent("https://gitlab.com/api/v4/projects/" + parseIntthis.value) + "/repository/tree");- 不加载 URLChrome 开发者控制台 > 网络 > 清除浏览器缓存
Chrome 开发者控制台 > Network > XHR > Initiator -> 路径和链看起来是正确的。
代码
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
$(".opt0").change(function(){
var url = "https://gitlab.com/api/v4/projects/" + this.value + "/repository/tree";
$.get(url, function( data ) {
console.log(data);
}, "json" );
});
});
</script>
</head>
<body>
<?php
$menu = array('xxxxxxx', 'yyyyyyy', 'zzzzzzz');
echo "<select name=selex class='opt0'>";
echo "<option value=''>---</option>";
foreach ($menu as $option) {
echo "<option value=$option>$option</option>";
}
echo "</select>";
?>
</body>
</html>
【问题讨论】:
-
我觉得很明显是项目名不对。
-
我已将电话从
"select"更新为".opt0"。我把它编码正确了,但不知何故它出现了问题。你是这个意思吗? -
我的意思是
this.value不包含 gitlab.com 上的有效项目名称。 -
当您在浏览器中访问相同的 URL(针对每个项目)(相同的浏览器,以确保相同的会话)会发生什么?
-
我以为 this.value 是项目的名称。我会留下我的 cmets,以防他们帮助其他人解决这个问题,但我没有更多的想法。祝你好运。
标签: jquery xmlhttprequest jqxhr