【问题标题】:javascript function not activatingjavascript函数未激活
【发布时间】:2019-12-15 02:40:19
【问题描述】:

所以我正在使用 spotify api 开发一个程序,并且目前正在使用他们的示例代码来熟悉 api。所以现在,我试图将我的东西插入到他们的东西中,看看我想做的事情是否可行。所以对于初学者来说,我需要从用户那里获取一个播放列表 ID,因此我用表单标签向他们询问。

<form onsubmit="MyKey()">
    Enter playlist ID:<br>
    <input type = "text" id = "MyKey" value = "">
    <input type = "button" value = "submit"/>
  </form>

然后它调用这个函数:

 <script>
  function MyKey(){
var playlist = document.getElementById('MyKey');
console.log(playlist);
 function getHashParams() {
      var hashParams = {};
      var e, r = /([^&;=]+)=?([^&;]*)/g,
          q = window.location.hash.substring(1);
      while ( e = r.exec(q)) {
         hashParams[e[1]] = decodeURIComponent(e[2]);
      }
      return hashParams;
    }

    var params = getHashParams();

var access_token = params.access_token,
refresh_token = params.refresh_token,
error = params.error;

console.log(access_token);
console.log(playlist);
document.getElementById('MyKey').addEventListener('submit',function() {
console.log(playlist);

$.ajax({
            url: 'https://api.spotify.com/v1/playlists/'+playlist+'/tracks?fields=items(track.id)',
            type: GET,
            headers: {
              'Authorization': 'Bearer ' + access_token
            },
            success: function(response) {
              console.log(response.items);
            }
        });
      },false);

  }
</script>

我放置控制台日志以查看我是否正确存储了变量,但我没有。当我点击提交时,控制台上什么也没有打印。所以我目前的理论是,当我点击提交时,没有任何反应,因为控制台日志会告诉我东西是未定义的。那么为什么我的脚本没有激活呢?感谢您提供任何帮助。此外,我拥有的表单位于脚本内部,因此我不知道这是否会影响任何事情,但我想它不会像在编程语言中那样,您可以从方法中调用方法。

【问题讨论】:

    标签: javascript html ajax spotify


    【解决方案1】:

    主要错误在 HTML,而不是 JavaScript。为了通过按钮提交表单,您需要设置要提交的类型,以便浏览器知道调用onsubmit 函数。

    您需要实际获取输入的值,而不是元素本身。您通常不想要嵌套函数,因为它所做的只是损害了可读性。

    如果您的 URL 格式正确且播放列表 ID/身份验证 ID 正确,则一切正常。

    工作 JavaScript:

    function handleSubmit() {
    
        // Get the value of the element
        var playlist = document.getElementById('MyKey').value;
    
        var params = getHashParams();
    
        var access_token = params.access_token,
            refresh_token = params.refresh_token,
            error = params.error;
    
        console.log(access_token);
        console.log(playlist);
    
        $.ajax({
            url: 'https://api.spotify.com/v1/playlists/' + playlist + '/tracks?fields=items(track.id)',
            type: 'GET',
            headers: {
                'Authorization': 'Bearer ' + access_token
            },
            success: function (response) {
                // Handle response
                console.log(response.items);
            }
        });
    
        return false;
    }
    
    // Make sure your URL contains something along the lines of
    // #access_token=123&refresh_token=abc
    function getHashParams() {
        var hashParams = {};
        var e, r = /([^&;=]+)=?([^&;]*)/g,
            q = window.location.hash.substring(1);
        while (e = r.exec(q)) {
            hashParams[e[1]] = decodeURIComponent(e[2]);
        }
        return hashParams;
    }
    

    工作 HTML:

    <form action="#" onsubmit="return handleSubmit();">
      Enter playlist ID:<br>
      <input type="text" id="MyKey" value="">
      <button type="submit">Submit</button>
    </form>
    

    【讨论】:

    • 所以我添加了您的更改减去表单操作,现在它至少需要输入但没有控制台日志通过
    • 我也修复了 JavaScript 文件中的所有内容。
    • 您是否在终端上获得了控制台日志的输出?我仍然不是,我不知道为什么。
    • 是的,控制台正在为我输出所有内容,请仔细检查并确保 JavaScript 与 HTML 匹配。
    • 所以我弄清楚了为什么我看不到控制台日志。 1. 我认为控制台日志意味着它会在终端上打印出来 2. 我通过将 id 更改为与函数名称不匹配的不同值来修复未定义的类型错误。现在我在使用 ajax 调用时遇到了一个错误,但这是我要弄清楚的,所以谢谢你的帮助。
    猜你喜欢
    • 2017-06-27
    • 2019-09-10
    • 2020-02-18
    • 2018-08-04
    • 1970-01-01
    • 2018-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多