【问题标题】:getJSON doesn't work with latest version of jQuerygetJSON 不适用于最新版本的 jQuery
【发布时间】:2012-01-12 16:26:06
【问题描述】:

以下代码 sn-p 使用 jQuery1.2.3 可以正常工作,但不适用于最新版本的 jQuery:

$.getJSON(url,{str: $$.val() }, function(j){
   if (j.length > 0) {
      var options = '<option value="">' +params.firstOption+ '</option>';
      for (var i = 0; i < j.length; i++) {
         options += '<option value="' + j[i].optionValue + '">' + j[i].optionDisplay + '</option>';
      }
   }
   $dest.removeAttr('disabled')
        .html(options)
        .find('option:first')
        .attr('selected', 'selected');
});

请注意,上面的代码实际上是用于级联下拉列表的 jQuery 插件的一部分。如果我使用 jQuery1.2.3,它会产生预期的结果。完整的插件代码如下:

(function($){

   $.fn.linkedSelect = function(url,destination,params) {


       var params = $.extend({

         firstOption : 'Please Select',

         loadingText : 'Loading...'

      },params);

      var $dest = $(destination);

      return this.each(function(){

         $(this).bind('change', function() {

            var $$ = $(this);

            $dest.attr('disabled','false')
                 .append('<option value="">' +params.loadingText+ '</option>')
                 .ajaxStart(function(){

                    $$.show();

            });

            $.getJSON(url,{str: $$.val() }, function(j){
               alert('User clicked on this.'); 
               if (j.length > 0) {

                  var options = '<option value="">' +params.firstOption+ '</option>';

                  for (var i = 0; i < j.length; i++) {

                     options += '<option value="' + j[i].optionValue + '">' + j[i].optionDisplay + '</option>';

                  }

               }

               $dest.removeAttr('disabled')
                    .html(options)
                    .find('option:first')
                    .attr('selected', 'selected');

            }); // end getJSON

         });  // end change

      }); // end return each

   };  // end function

})(jQuery);

请注意,它无法生成以下警报消息

alert('User clicked on this.');

如果我使用最新版本的 jQuery,getJSON 函数中写入的内容用于调试目的。而且我还使用JS调试器进行了跟踪,如果我使用最新版本的jQuery,它无法进入getJSON函数。但是,如果我使用 jQuery1.2.3,它会显示此警报消息。

在错误控制台中,警告消息是:

Warning: reference to undefined property b.p.height
Source File: http://localhost//js/jquery.jqGrid.min.js Line: 99
Warning: reference to undefined property b.p.serializeGridData
Source File: http://localhost/js/jquery.jqGrid.min.js Line: 62
Warning: reference to undefined property jQuery.event.triggered
Source File: http://localhost/js/jquery1.7.js Line: 2924
Warning: reference to undefined property elem[jQuery.expando]
Source File: http://localhost/js/jquery1.7.js Line: 1719

我应该改变什么以适应最新版本的 jQuery。谢谢你。

【问题讨论】:

  • 欢迎来到 Stack Overflow! “它不起作用”从不是一个好的错误描述。请描述出现了什么问题、收到的错误消息等。
  • 那么失败到底在哪里?你可以在代码中添加一些console.log来找出你正在尝试使用的最新版本的jquery以及你是如何加载它的?
  • 您能否更深入地解释一下它是如何不工作的以及您的测试用例是什么?您在完全相同的代码上测试完全相同的输入,唯一的区别是 jQuery 版本,对吧?
  • @Andrew Latham,如果我使用 jQuery1.2.3,我会得到想要的结果。
  • 是的,现在说得通了。我同意马特 - 看起来你需要更新 jqGrid

标签: jquery getjson


【解决方案1】:

根据控制台中的错误,您使用的 jqGrid 版本似乎与 jQuery 1.7 不兼容。

如果它与您在 jQuery 1.2.3 中使用的 jqGrid 版本相同,那么这至少不足为奇。 jQuery 1.2.3 是古老的历史——大约四年前发布。

【讨论】:

  • 我已经完全按照文档更新了 jqGrid 及其 jQuery 版本。请注意 jqGrid 功能没有问题,但 Cascading (Linkedselect) 插件有问题。谢谢。
  • 哦,那很可能是其他插件。首先,您应该使用.prop() 而不是.attr() 来禁用$dest
  • 我已经在单独的文件中测试了没有 jqGrid 插件的级联插件。它在级联功能中与 jQuery1.5.2 产生相同的问题,但与 jQuery1.2.3 没有问题。所以,问题只在级联插件中。您建议改用什么更好的级联插件?我还使用 .prop() 而不是 .attr() 来禁用 $dest 以进行测试。
  • 我没有为此目的使用的特定插件,所以我不能推荐谷歌以外的插件。
【解决方案2】:

您的服务器很可能生成了无效的 JSON。

【讨论】:

  • 感谢大家的快速回复。 @blockhead,我已经测试过了。它产生有效的 JSON。
  • 是的,你是对的。实际上,jQuery 1.3 和更早的版本使用 JavaScript 的 eval 来评估传入的 JSON。 jQuery 1.4 使用本机 JSON 解析器(如果可用)。它还验证传入 JSON 的有效性,因此在 jQuery.getJSON 中以及将“json”指定为 Ajax 请求的 dataType 时,jQuery 将拒绝格式错误的 JSON(例如 {foo: "bar"})。
  • 我的服务器端脚本会生成像 { Value: 28.000, Display: "28.000"} 这样的 JSON,并且可以在 jQuery1.3+ 上正常工作。对于最新的 jQuery,我必须将其更改为 { "Value": "28.000","Display":"28.000"}
  • @wachy:谢谢!你帮了我。我错过了围绕我的价值观的双引号,我无法弄清楚问题是什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-29
  • 1970-01-01
相关资源
最近更新 更多