【问题标题】:Why isn't my callback being called on one page only?为什么我的回调不只在一页上被调用?
【发布时间】:2011-04-19 02:05:13
【问题描述】:

我正在使用 jQuery 获取一些 JSON,然后将其插入一些元素并显示在我的页面上。

它在 all pages 上运行良好,但 one 除外,其中响应似乎是页面本身。

我已将 alert()s 放在回调中(successcomplete),但它们似乎从未被触发(尽管 Firebug 显示请求返回 200 OK应该触发success 处理程序)。

我不知道该怎么办,我以前从未遇到过。

这是我正在使用的 jQuery 代码:

var specials = (function() {

    var specials = false,
        specialsAnchor;

    var init = function() {
        specialsAnchor = $('#menu-specials a');

        specialsAnchor.click(function(event) {
            event.preventDefault();
            if (specials != false && specials.is(':visible')) {
                hide();
            } else {
                show();
            }

        });
    };

    var load = function(callback) {

      specialsAnchor.addClass('loading');

      specials = $('<div />', { 'id': 'specials' }).hide().appendTo('#header');

      var specialsUl = $('<ul />').appendTo(specials);

      $.ajax(specialsAnchor.attr('href'), {
          dataType: 'json',
          success: function(data) {

            $.each(data, function(i, special) {

                specialsUl.append('<li><h4>' + special.heading + '</h4><p>' + special.content + '</p></li>');

            });
            specialsAnchor.removeClass('loading');
            callback.call();

         }

      });

    }

    var show = function() {
      if (specials == false) {
        load(show);
        return;
      }
      specials.slideDown(500);
    }

    var hide = function() {
      specials.slideUp(500);
    }

    $(init);

})();

发生了什么事?

【问题讨论】:

  • data.basePath 来自哪里...我没有看到 data 在任何地方定义。没关系..它是一个全球性的......
  • @prodigitalson 说了什么,顺便说一句,我认为这是某种 URL/层次结构问题。
  • @prodigitalson 在head元素中定义。
  • @prodigitalson 我更改了它,但请记住这是所有页面上的相同 URL。

标签: javascript jquery ajax json


【解决方案1】:

我注意到您在此页面上包含了 jquery.validate,但没有在其他页面上包含。 jQuery 使用 AJAX 调用验证 jQuery > 1.5 causes some issues

我意识到链接的问题/答案并不完全是您所看到的,但我已经看到了 AJAX 调用以及 validate 和 jQuery 组合的各种奇怪问题,所以我认为值得一提。

希望对您有所帮助。

【讨论】:

  • 我自己绝对不会想到这一点!非常感谢:)
【解决方案2】:

这可能不是一个完整的答案,但可能是朝着正确方向迈出的一步。使用Charles Proxy,当我单击特价时,它似乎在您的其他页面上,它向http://www.toberua.com/~new/specials 发出请求,但是在联系我们页面上,ajax 请求改为转到http://www.toberua.com/~new/contact-us(当然不是json)

另一个有趣的注释: 其他页面上的 XMLHttpRequest 正确设置了 Accept 标头(即 Accept application/json, text/javascript, */*; q=0.01 ,而在联系我们页面上它设置为 Accept */*)。我敢打赌有一个不同的代码分支被调用...

【讨论】:

  • 谢谢,我已经想通了。现在只需要知道,为什么?
猜你喜欢
  • 2011-12-31
  • 1970-01-01
  • 1970-01-01
  • 2012-08-02
  • 1970-01-01
  • 2018-06-02
  • 1970-01-01
  • 2020-08-12
  • 1970-01-01
相关资源
最近更新 更多