将 JQuery getJSON 与包含的其他 JavaScript 一起使用会出现 ReferenceError

2024-04-24

我制作了一个小型 HTML 页面示例来使 JQuery 的 getJSON 方法正常工作。它如下所示(抱歉,草率了,这只是一个概念证明,稍后会添加到更大的项目中):

<script type="text/javascript">

function test() {   
$.getJSON("http://api.flickr.com/services/rest/?&method=flickr.people.getPublicPhotos&api_key=e999b3a5d47d013b780e8ac255c86266&user_id=24579658@N03&format=json&jsoncallback=?",    
                function(data){
                      $.each(data.photos.photo, function(i,photo){
     $("<img/>").attr("src", "http://farm5.static.flickr.com/" + photo.server + "/" + photo.id + "_" + photo.secret + ".jpg").appendTo("#images2");
    //alert();
        if ( i == 6 ) return false;
      });
});

}

然后,当使用单击某些内容时,我会调用该方法

<script type="text/javascript">

                            $(function() {
                                $("#yo").click(test);
                            });
    </script>

这在我包含的唯一 JS 是 JQuery 并且这些是唯一的函数的项目中工作得很好。然而,一旦我将它添加到我的其他项目中,它就会出错。另一个项目包含一些 mootools 库,我认为它们可能已经做到了。然而,即使在完全删除 mootools 的东西并只使用这个 jquery 的东西之后,我仍然收到以下错误:

参考错误:$ 未定义

我确实包含其他 javaScript,例如 google 的 JavaScript 和我制作的其他一些 JavaScript,但它们不使用 JQuery 或 Mootools。谁能解释为什么我会收到此错误?


听起来确实好像您引入的某些附加代码未定义 $ 符号。事实上,您可能已经包含了一些调用 jQuery 的 noConflict 函数的代码,该函数专门取消了 $.

jQuery 本质上是这样定义的:

$ = jQuery;

这意味着您可以将代码中的 $ 符号替换为“jQuery”,例如:

jQuery.getJSON(...

or

jQuery(function() {
    jQuery("#yo").click(test);
});

当然,$符号快捷方式当然很方便。放弃它将是一种耻辱,因此您可以重新定义它以再次代表“jQuery”。不过,您不希望它破坏任何其他非 jQuery JavaScript,因此重新建立 $ 快捷方式的安全方法是将您自己的所有代码包装在闭包中。每个闭包函数的唯一参数将是“$”,传递给每个闭包的参数将是“jQuery”。例如:

(function($) {
        function test() {   
            $.getJSON("http://api.flickr.com/services/rest/?&method=flickr.people.getPublicPhotos&api_key=e999b3a5d47d013b780e8ac255c86266&user_id=24579658@N03&format=json&jsoncallback=?",    
                        function(data){
                              $.each(data.photos.photo, function(i,photo){
             $("<img/>").attr("src", "http://farm5.static.flickr.com/" + photo.server + "/" + photo.id + "_" + photo.secret + ".jpg").appendTo("#images2");
            //alert();
                if ( i == 6 ) return false;
              });
        });
})(jQuery);

请注意,匿名函数闭包具有参数 $,因此在整个函数内,$ 将具有传递给匿名函数的值。接下来,请注意,在函数定义的末尾,我们立即调用刚刚定义的函数,并将 jQuery 作为参数传递。这意味着在闭包内部,但是only在闭包内,$ 现在是 jQuery 的快捷方式。

最后一点,您可以通过调用 jQuery.noConflict() 有意关闭 jQuery 对 $ 符号的使用(请参阅http://api.jquery.com/jQuery.noConflict/ http://api.jquery.com/jQuery.noConflict/)。如果您将使用您的代码和 jQuery 之外的其他 JavaScript 代码,那么最好在加载所有 JavaScript 文件后调用该函数,然后使用上面描述的闭包技术,以便您可以安全地继续您自己的代码中的 $ 快捷方式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 JQuery getJSON 与包含的其他 JavaScript 一起使用会出现 ReferenceError 的相关文章

  • 如何从 OnChange 事件捕获文本框的值

    在我的 C MVC 应用程序中 我有一系列这样生成的文本框 foreach object item in items Html TextBox 渲染的结果是一系列看起来像这样的文本框
  • 应用程序在 JSON jparser 发出 http 请求时崩溃

    您好 我使用本教程连接到网络或本地的 mySQL 数据库 here http www androidhive info 2012 05 how to connect android with php mysql 虽然所有服务器端 php 文
  • 弹出窗口显示来自 php 和 javascript 的结果

    我正在尝试实现 javascript 来显示 php 的结果 基本上 我有一个登录页面 对于登录失败 我希望结果显示在弹出窗口中 而不是仅仅用 php 回显它们 我尝试实现警报框 但看起来我错过了一些东西 成功登录将被重定向到logged
  • 如何在 jQuery 中检查 null 对象

    我正在使用 jQuery 我想检查页面中是否存在某个元素 我写了以下代码 但它不起作用 if btext i null alert btext i text btext i text Branch i 如何检查元素是否存在 检查jQuery
  • 从 BLOB 打印 PDF

    我从外部 API 获取 PDF 文件 使用此代码我可以正确下载该文件 var req new XMLHttpRequest req open POST url true req responseType blob req setReques
  • 查找 div 元素中的所有链接并禁用它们

    假设我有一些如下所示的 HTML 元素 div span a href some link Click me a span div Hello everybody Click a href some link else me a to do
  • 我们如何针对 DOM 操作执行单元测试?

    QUnit 的介绍位于netTuts com http net tutsplus com tutorials javascript ajax how to test your javascript code with qunit 关于如何针
  • "$(document).on('pageshow'" 不适用于 jQuery 1.9.1 + JQM 1.3.0-stable

    使用 jQuery 1 8 3
  • Jquery 事件处理程序返回值

    返回值有什么用处吗 click and change 处理程序 如return true or return false return false 将阻止事件冒泡AND抑制默认操作 换句话说 返回 false 类似于这两行 event st
  • Angular $http 正在发送 OPTIONS 而不是 PUT/POST

    我正在尝试通过 PHP 后端更新 插入 MySQL 数据库中的数据 我正在使用 AngularJS 构建前端并使用 http用于与 REST API 通信的服务 我的设置如下所示 我通过 httpProvider 设置标头 httpProv
  • 我要疯了吗? jQuery .click() 似乎不起作用

    下面的代码不适用于任何浏览器 它应该显示一个警报框 我究竟做错了什么 a href test a 将其放入 document ready 中
  • 能否使用 jQuery 的 $(responseXML) 语法可靠地解析 XML?

    我目前正在寻找一种使用 JavaScript 从服务器 XML 响应中提取信息的简单方法 jQuery 似乎是一个很好的候选者 当谈到使用 jQuery 解析 XML 时 我不断遇到类似于以下代码片段的代码示例 function parse
  • Blueimp 文件上传:上传前从文件列表中删除文件

    在提交要上传的表单之前 如何从 Blueimp 插件的选定文件列表中删除文件 我试过这个答案 https stackoverflow com questions 18267958 how to remove file from the qu
  • jQuery 单击事件更改 php 会话变量

    对此最好的方法是什么 因为 正如我发现的 只有在尝试过之后才完全有意义 p 你不能在 javascript 条件下设置 PHP 变量 杜尔赫 我能想到的唯一解决方案是对一个处理会话变量的小型 PHP 文件进行 AJAX 调用 elm cli
  • 为什么 RestTemplate 不将响应表示绑定到 PagedResources?

    我正在使用 spring data rest 将实体公开为 分页 剩余资源 一切正常 但是当我通过以下方式请求数据时RestTemplate 我得到了一个无用的 HATEOAS JSON 我没有要求 JSON 似乎是一个 PagedReso
  • 加载一张随机 flickr 图像并附加到 div

    我基本上试图加载从特定用户和特定集合中获取的随机 flickr 图像 然后将其显示在 ID 为 flickr wrap 的 div 中 我正在尝试操纵此 JSON 代码来执行我想要的操作 但不知道从哪里开始 这段代码当前加载了很多图像 我只
  • 如果 jQuery 验证失败,JSLint 有什么用?

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Twitter-Typeahead 不提供建议

    我正在尝试使用twitter typeahead rails 我的目的是当我在 Typeahead 输入框中键入内容时 通过下拉框建议模型 User 的实例 但是 当我打字时什么也没有发生 有人看到我的代码有什么问题吗 Gemfile ge
  • 如何在 Django 中创建多选框?

    我正在尝试创建多选框字段来自姜戈选择 2 https github com applegrew django select2库如下图所示 我使用了下一个代码 但它返回简单的选择多个小部件 我想我忘了补充一些东西 我的错误在哪里 有人可以告诉
  • JQuery 从 Div 中抓取文本减去子元素[重复]

    这个问题在这里已经有答案了 有没有一种简单的方法可以从这个 div 中获取文本而不获取任何子元素 div strong Title Text Unwanted strong This is the text I need div 我知道我可

随机推荐