Quickbooks 调用intuit.ipp.anywhere.setup()的最佳实践?

Quickbooks 调用intuit.ipp.anywhere.setup()的最佳实践?,quickbooks,intuit-partner-platform,quickbooks-online,Quickbooks,Intuit Partner Platform,Quickbooks Online,这是一个关于生成标准“连接到QuickBooks”按钮(用于通过Intuit的v3 REST API建立到QuickBooks Harmony的连接)的JavaScript调用的最佳实践的问题 如果我以Intuit为例,我会: 脚本标记中的引用 将标记集放置在我希望“连接到QuickBooks”按钮显示的位置 交叉我的手指,希望intuit.ipp.anywhere.js没有重定向到停机消息,它仍然存在 拨打intuit.ipp.anywhere.setup()电话 请参见“连接到QuickBo

这是一个关于生成标准“连接到QuickBooks”按钮(用于通过Intuit的v3 REST API建立到QuickBooks Harmony的连接)的JavaScript调用的最佳实践的问题

如果我以Intuit为例,我会:

  • 脚本标记中的引用
  • 将标记集放置在我希望“连接到QuickBooks”按钮显示的位置
  • 交叉我的手指,希望intuit.ipp.anywhere.js没有重定向到停机消息,它仍然存在
  • 拨打intuit.ipp.anywhere.setup()电话
  • 请参见“连接到QuickBooks”按钮
  • 。。。它有效(对于许多“有效”的价值观而言),但感觉相当脆弱:

  • 如果intuit.ipp.anywhere.js正在重定向到停机消息(读取:非JavaScript)或不可用,我将收到一个脚本错误
  • 如果我得到一个脚本错误(或者Intuit的脚本副本出现了其他问题),则不会向用户提供任何反馈,只有“连接到QuickBooks”按钮所在的空白区域
  • 为了使这一切更具弹性,我将对intuit.ipp.anywhere.js的引用和对intuit.ipp.anywhere.setup()的调用结合到一个JQuery.ajax()调用中:

    。。。这也有效(对于更多的“工作”值):

  • 我对setup()的调用被包装在成功处理程序中(以及对intuit对象存在性的额外检查),因此如果出现问题,我不应该得到脚本错误
  • 如果Intuit脚本的GET超时(4000ms后)或返回非脚本的内容,我将向用户显示一条友好的错误消息
  • 还有其他人采取了不同的方法吗?
    Intuit恢复在线了吗?

    这与我们处理它的方式类似。我们将其包装在jQuery.getScript调用中,但显然.fail处理程序不能处理跨域脚本标记。我们的解决办法如下:

    <script type="text/javascript>
        var timeoutID;
        timeoutID = window.setTimeout(function () {
            $("#ippConnectToIntuit").replaceWith('<p class="error-message">There was a problem communicating with QuickBooks. The service may be down or in heavy use. Try again later.</p>');
            }, 5000);
        $.getScript("https://appcenter.intuit.com/Content/IA/intuit.ipp.anywhere.js")
            .done(function () {
                window.clearTimeout(timeoutID);
                intuit.ipp.anywhere.setup({
                    menuProxy: '/path/to/our/menu/proxy',
                    grantUrl: '/path/to/our/grant/url'
                });
            });
    </script>
    <div id="ippConnectToIntuit"><ipp:connecttointuit></ipp:connecttointuit></div>
    

    嘿,这看起来是一个很好的开始-这会不会让你的浏览器停止使用本地缓存?@TroyAnderson我们使用
    .getScript
    函数,默认情况下会将缓存设置为“false”。通过弯刀的帖子,他可以在
    .ajax
    参数中添加一个显式的
    缓存:false
    。@TroyAnderson在
    上不需要显式的
    缓存:false
    。ajax
    参数,因为
    数据类型:script
    将默认缓存值为false()
    <script type="text/javascript>
        var timeoutID;
        timeoutID = window.setTimeout(function () {
            $("#ippConnectToIntuit").replaceWith('<p class="error-message">There was a problem communicating with QuickBooks. The service may be down or in heavy use. Try again later.</p>');
            }, 5000);
        $.getScript("https://appcenter.intuit.com/Content/IA/intuit.ipp.anywhere.js")
            .done(function () {
                window.clearTimeout(timeoutID);
                intuit.ipp.anywhere.setup({
                    menuProxy: '/path/to/our/menu/proxy',
                    grantUrl: '/path/to/our/grant/url'
                });
            });
    </script>
    <div id="ippConnectToIntuit"><ipp:connecttointuit></ipp:connecttointuit></div>