【问题标题】:JQuery only excecutes after Alert in FirefoxJQuery 仅在 Firefox 中的 Alert 之后执行
【发布时间】:2014-05-06 07:24:16
【问题描述】:

当用户单击本地赞按钮、fb 赞按钮或 Twitter 按钮时,我正在尝试使用“changeRating()”方法在我的数据库中添加“赞”。

但是当用户在 Firefox 中单击这些按钮时,我的“喜欢”并没有增加,在 Chrome 中一切正常。在 Firefox 中,它仅在 JQuery 开头的 alert 被激活时才有效?

jQuery(document).ready(function () {
        //alert('test'); (when this is activated it works)

        $(".fb-like").mouseup(function () {

            var vraagIdToUpdate = $(".vraagid").attr("value");

            if (vraagIdToUpdate != '') {
                changeRating(vraagIdToUpdate);
            }
        });

        FB.Event.subscribe('edge.create',
        function (response) {
            var vraagIdToUpdate = $(".vraagid").attr("value");

            if (vraagIdToUpdate != '') {
                changeRating(vraagIdToUpdate);
            }
        });

       $(".twitter-share-button").mouseup(function () {
            var vraagIdToUpdate = $(".vraagid").attr("value");

            if (vraagIdToUpdate != '') {
                changeRating(vraagIdToUpdate);
            }
        });

        twttr.events.bind('click', function () {
            var vraagIdToUpdate = $(".vraagid").attr("value");

            if (vraagIdToUpdate != '') {
                changeRating(vraagIdToUpdate);
            }
        });

        $("#stemknop").click(function () {
            //voeg event handler toe aan de click-functie op de link (die als className twitter-share-button heeft meegekregen)
            var vraagIdToUpdate = $(".vraagid").attr("value");
            //alert('gelukt');
            $(this).css({ 'opacity': '0.4' });

            if (vraagIdToUpdate != '') {
                changeRating(vraagIdToUpdate);
            }
        });

        function changeRating(vraagId) {
            //Maak een JSON object aan met dezelfde property-name als ons Model classe
            var shareModel = { vraagID: vraagId };

            $.post("/api/ShareAPI/ChangeNumberOfShares", shareModel).success(function (result) { $('.aantalStemmen').text(result.newAantalShares) });
        }
    });

我知道当一些代码需要特定的东西时,可能有一些东西加载得太快或不存在...... alert() 导致我的代码“等待”,所以它确实有效。但我似乎无法找到导致此问题的代码。

编辑:我的 Firefox 控制台声明如下:

ReferenceError: FB 未定义 Vraag:143 ReferenceError: FB 未定义 定义 Vraag:247 Gebruik van getUserData() of setUserData() wordt 不再关注。 Gebruik in plaats daarvan WeakMap of 元素.数据集。 requestNotifier.js:64 "无效的应用程序 ID:必须是 表示应用程序 ID 的数字或数字字符串。” sdk.js:53 ""fb-root" div 尚未创建,自动创建"sdk.js:53" 否 回调传递给 ApiClient” sdk.js:53 错误:容器不是 定义格式+nl,default+nl,ui+nl,corechart+nl.I.js:130 Gebruik van getUserData() of setUserData() wordt niet meer ondersteund。格布鲁克 element.dataset 的 plaats daarvan WeakMap。 requestNotifier.js:64 Gebruik van getPreventDefault() wordt niet meer ondersteund。格布鲁克 在 plaats daarvan defaultPrevented。 jquery-1.8.2.js:3260 错误: 容器未定义

【问题讨论】:

  • 可能是 FB.Event。或 twttr.events。
  • 我猜代码是异步的,需要一些时间来加载,当你收到警报时,它会给浏览器额外的一秒时间在后台下载/执行
  • 是的,我倾向于同意@crisbeto。确保在上面代码中调用的 javascript 之前加载 FB JS。
  • 我应该如何强制此代码在该代码之前加载?
  • 试试看一下 facbook API,很可能当所有东西都加载完毕后他们有回调

标签: javascript jquery html ajax firefox


【解决方案1】:

将您的发布请求更改为 ajax 并使请求同步: 例如:

$.ajax({
   type: 'POST',
   url: "/api/ShareAPI/ChangeNumberOfShares",
   data: shareModel,
   success: function(result) {
                  $('.aantalStemmen').text(result.newAantalShares);
              },
   async:false
});

【讨论】:

  • 和我的帖子一样的错误,FB未定义等
【解决方案2】:

编辑:也可以在这里查看答案Is there a way to detect if the Facebook Javascript SDK loaded successfully?

试试这个:

jQuery(document).ready(function () {
        //alert('test'); (when this is activated it works)

        FB.Event.subscribe('edge.create', function (response) {
            var vraagIdToUpdate = $(".vraagid").attr("value");

            if (vraagIdToUpdate != '') {
                changeRating(vraagIdToUpdate);
            }

            $(".fb-like").mouseup(function () {

                var vraagIdToUpdate = $(".vraagid").attr("value");

                if (vraagIdToUpdate != '') {
                    changeRating(vraagIdToUpdate);
                }
            });

            $(".twitter-share-button").mouseup(function () {
                var vraagIdToUpdate = $(".vraagid").attr("value");

                if (vraagIdToUpdate != '') {
                    changeRating(vraagIdToUpdate);
                }
            });

            twttr.events.bind('click', function () {
                var vraagIdToUpdate = $(".vraagid").attr("value");

                if (vraagIdToUpdate != '') {
                    changeRating(vraagIdToUpdate);
                }
            });

            $("#stemknop").click(function () {
                //voeg event handler toe aan de click-functie op de link (die als className twitter-share-button heeft meegekregen)
                var vraagIdToUpdate = $(".vraagid").attr("value");
                //alert('gelukt');
                $(this).css({ 'opacity': '0.4' });

                if (vraagIdToUpdate != '') {
                    changeRating(vraagIdToUpdate);
                }
            });

            function changeRating(vraagId) {
                //Maak een JSON object aan met dezelfde property-name als ons Model classe
                var shareModel = { vraagID: vraagId };

                $.post("/api/ShareAPI/ChangeNumberOfShares", shareModel).success(function (result) { $('.aantalStemmen').text(result.newAantalShares) });
            }
        });
    });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-05
    • 1970-01-01
    • 2012-02-20
    • 2011-09-09
    • 2017-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多