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

如果我遵循Intuit的示例,我将:

  • 在脚本标签中引用https://appcenter.intuit.com/Content/IA/intuit.ipp.anywhere.js
  • 将标签集放置在我想要“连接到QuickBooks”按钮以显示
  • 的位置
  • 双手合十,希望intuit.ipp.anywhere.js不会重定向到停机消息,仍然存在
  • 调用intuit.ipp.anywhere.setup()
  • 请参见“连接到QuickBooks”按钮

  • ...可以工作(对于“works”的许多值),但感觉很脆弱:
  • 如果intuit.ipp.anywhere.js重定向到停机消息(阅读:不是JavaScript)或由于其他原因不可用,我将收到脚本错误。
  • 如果遇到脚本错误(或者Intuit的脚本副本出了点问题),则没有任何反馈给用户,只有一个空白区域,即“连接到QuickBooks”按钮。

  • 为了使这一切更具弹性,我将对intuit.ipp.anywhere.js的引用和对intuit.ipp.anywhere.setup()的调用合并到一个JQuery .ajax()调用中:
        $.ajax({
         url: 'https://appcenter.intuit.com/Content/IA/intuit.ipp.anywhere.js',
         type: 'GET',
         dataType: 'script',
         timeout: 4000,
         success: function(response) {
          if (typeof intuit !== 'undefined') {
           intuit.ipp.anywhere.setup({
            menuProxy: 'MYMENUPROXYURL.aspx',
            grantUrl: 'MYGRANTURL.aspx'
           });
          }
         },
         error: function(x, t, m) {
           // show some friendly error message about Intuit downtime
         }
        });
    

    ...也可以使用(对于“works”的更多值):
  • 我对setup()的调用包含在成功处理程序中(以及对intuit对象的附加检查),因此,如果出现问题,我不会收到脚本错误。
  • 如果Intuit脚本的GET超时(在4000毫秒后)或返回的不是脚本,我将向用户显示友好的错误消息。

  • 还有其他人采用其他方法吗?
    并且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>
    

    10-08 15:52