【问题标题】:jQuery.get is not pulling data from a valid URLjQuery.get 没有从有效的 URL 中提取数据
【发布时间】: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/tree
  • jquery.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"); - 不加载 URL

  • Chrome 开发者控制台 > 网络 > 清除浏览器缓存

  • 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


【解决方案1】:

答案毕竟是身份验证问题。

<script>
    $(document).ready(function(){
        $(".opt0").change(function(){
            var url1 = "https://gitlab.com/api/v4/projects/"+this.value+"/repository/tree";
            var settings = {
              "async": true,
              "crossDomain": true,
              "url": url1,
              "method": "GET",
              "headers": {
                "PRIVATE-TOKEN": "<your token>"
              }
            }
            $.ajax(settings).done(function (response) {
                console.log(response);
            });
        });
    });
</script>

【讨论】:

    猜你喜欢
    • 2018-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多