【问题标题】:Chrome says I am using illegal function invocationChrome 说我在使用非法的函数调用
【发布时间】:2015-02-11 21:26:44
【问题描述】:

我正在尝试编写一些涉及调用另一个函数的函数的 Javascript 代码。出于某种原因,我在 Chrome 开发工具中收到一条错误消息,在第 6 行显示“未捕获的 TypeError:非法调用”。但是,getRequest 函数似乎仍然执行并将“h”记录到控制台。这是怎么回事?

$(document).ready(function(){});
$(function(){
  $('#search').click(function(event){
    event.preventDefault();
    var searchTerm = $('#query').val();
    getRequest();
  });
});

function getRequest(searchTerm){
  console.log("h");
  var params = {
    part: 'snippet',
    key: 'AIzaSyC7oHGfvlIMoEnboos6LZ2b2h_KpPu0u1Q',
    q: $('#searchbox') //searchTerm
  };
  url = 'https://www.googleapis.com/youtube/v3/search';

  $.getJSON(url, params, function(data){
    showResults(data.Search);
    //console.log("x");
  });
}

【问题讨论】:

  • 错误发生在哪一行?
  • 你想用q: $('#searchbox')做什么?这将一个 jQuery 对象作为 URL 参数传递,这是没有意义的。你的意思是q: seachTerm
  • 只是想知道:为什么你在第 5 行得到了 searchTerm,然后不把它作为 getRequest() 的参数?
  • 顺便说一句,你的代码的第一行什么都不做。 $(handler)$(document).ready(handler) 做同样的事情。见api.jquery.com/ready
  • 所以我用 LcSalazar 的回答解决了这个问题。如果有人能给我一些反馈,说明为什么我的问题一直被否决,我将不胜感激。我认为这是一个很好的问题,如果没有反馈,我真的别无选择,只能继续发布可能也会被否决的问题,直到我被禁止。

标签: javascript jquery function invocation


【解决方案1】:

您将 JQuery 对象作为参数传递,而 JQuery 无法对其进行序列化:

    key: 'AIzaSyC7oHGfvlIMoEnboos6LZ2b2h_KpPu0u1Q',
    q: $('#searchbox') //searchTerm
};

如果是输入,你可以使用.val()传递它的值

    key: 'AIzaSyC7oHGfvlIMoEnboos6LZ2b2h_KpPu0u1Q',
    q: $('#searchbox').val() //searchTerm
};

或者

只需使用您在方法中收到的参数(这就是您创建它的原因,不是吗?)

getRequest(searchTerm);

然后

    key: 'AIzaSyC7oHGfvlIMoEnboos6LZ2b2h_KpPu0u1Q',
    q: searchTerm
};

【讨论】:

  • LcSalazar 关于问题所在是正确的。此外,错误消息有点令人困惑。您必须将其解释为“此异常发生在此调用下方的调用堆栈中的某处”。也就是说,在执行getRequest()时发生了非法调用。
  • 谢谢,这回答了我原来的问题。但是,现在我收到了另一条错误消息,这条消息在第 4 行显示“未捕获的类型错误:无法读取未定义的属性 'length'”。我不知道它在说什么。
  • @FrankTocci - 如果您还有其他问题,请随意发布针对特定错误的另一个问题,以免混淆主题。
【解决方案2】:

您的函数 'getRequest' 有一个 'searchTerm' 属性,并且您在调用函数时没有传递任何属性。

$(function(){
  $('#search').click(function(event){
    event.preventDefault();
    var searchTerm = $('#query').val();
    getRequest(); // Here is the problem
  });
});

【讨论】:

  • 我认为你的意思是 parameter,而不是 attribute
  • 这可能是个问题,但不会导致他遇到的错误。它只会将参数设置为undefined
猜你喜欢
  • 1970-01-01
  • 2013-01-19
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-31
相关资源
最近更新 更多