2014-02-19 15 views
5

Dies ist eine Frage zu Best Practices für die Ausführung des JavaScript-Aufrufs, der die Standardschaltfläche "Mit QuickBooks verbinden" generiert (zum Herstellen einer Verbindung zu QuickBooks Harmony über die Intuit v3-REST-API).Best Practices für den Aufruf von intuit.ipp.anywhere.setup()?

Wenn ich Intuit Beispiel folgen, würde ich:

  1. Referenz https://appcenter.intuit.com/Content/IA/intuit.ipp.anywhere.js in einem Script-Tag.
  2. Platz der < ipp: connectToIntuit > </ipp: connectToIntuit > tagset, wo ich den Button "Quickbooks verbinden" wollen
  3. Kreuz meine Finger und hoffen, anzuzeigen, dass intuit.ipp.anywhere.js nicht wird Umleitung einer Außerbetriebmeldung weiterhin, wieder existiert
  4. mein call()
  5. die "Verbindung mit Quickbooks" Taste

ansehen ... intuit.ipp.anywhere.setup machen, die funktioniert (Für viele Werte von „Werken“), aber ziemlich zerbrechlich fühlt:

  1. Wenn intuit.ipp.anywhere.js eine Außerbetriebnahme-Nachricht umgeleitet (sprich: nicht JavaScript) oder anderweitig nicht verfügbar, ich werde ein Skriptfehler
  2. Wenn ich einen Skriptfehler bekomme (oder etwas anderes schief geht mit Intuits Kopie des Skripts), gibt es keine Rückmeldung an den Benutzer, nur ein Leerzeichen, wo die Schaltfläche "Connect to QuickBooks" sein sollte.

Um dies alles ein wenig belastbarer, ich den Verweis auf intuit.ipp.anywhere.js und den Anruf() in ein JQuery .ajax() Aufruf intuit.ipp.anywhere.setup Kombination :

$.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 
    }   
    }); 

..., die auch (für ein paar Werte von „Werken“) funktioniert:

  1. Mein Anruf(), um Setup innerhalb des Erfolgs Handler auf gewickelt ist (und eine zusätzliche Prüfung die Existenz des intuit Object), also sollte ich keinen Skriptfehler bekommen, wenn etwas schief läuft.
  2. Wenn das GET von Intuits Skript abgelaufen ist (nach 4000ms) oder etwas zurückgibt, das kein Skript ist, zeige ich dem Benutzer eine freundliche Fehlermeldung.

Hat jemand anderes einen anderen Ansatz gewählt? Und ist Intuit wieder online?

+0

Hey, das sieht nach einem guten Start aus - macht das Ihren Browser damit aufhören, den lokalen Cache zu benutzen? –

+0

@TroyAnderson Wir verwenden die '.getScript'-Funktion, die den Cache standardmäßig auf 'false' setzt. Mit dem Beitrag von The Machete konnte er den '.ajax' Parametern einen expliziten' cache: false' hinzufügen. – dthagard

+0

@TroyAnderson Ein expliziter 'cache: false' ist für die' .ajax' Parameter nicht erforderlich, da 'dataType: script' den Cache auf false ([reference] (http://api.jquery.com/jquery) setzt .Ajax /)) –

Antwort

2

Das ist ähnlich wie wir es behandelt haben. Wir hatten es in den jQuery.getScript-Aufruf gehüllt, aber offensichtlich funktioniert der .fail-Handler nicht mit domänenübergreifenden Skript-Tags. Unsere Lösung ist wie folgt: