2016-07-25 781 views
0

Grundsätzlich, wenn ich den Code ausführen, Warenkorb und Produkt nicht erkannt werden, und ich habe keine Ahnung, warum das ist.

Hier ist der Code:

$.when(
    $.getJSON(_config.shopifyAjaxCartURL), 
    $.getJSON(_config.shopifyAjaxProductURL) 
).then(function(cart,product){ 
    alert ('1 - TOTAL ITEM COUNT: ' + cart.item_count); 
    for (var i = 0; i <= cart.item_count; i++) { 
     alert ('2 - LOOPING'); 
     if (cart.items[i].sku == product.variants[0].sku) { 
      productQuantity = cart.items[i].quantity; 
      alert ('3 - FOUND IT'); 
      return false; 
     }    
    }   
    alert ('NUMBER 4'); 
}); 

Hier sind die Ergebnisse:

  • 1: Fordert "1 - TOTAL Anzahl der Angaben: undefined"

  • 2: Geht NICHT in die Schleife.

  • 3: Prompts "NUMBER 4"

-

Auf der anderen Seite, wenn ich für $ .when und die Funktion einer der beiden Parameter entfernen, jedoch Alles funktioniert perfekt. Zum Beispiel würde diese Arbeit:

$.when($.getJSON(_config.shopifyAjaxCartURL)).then(function(cart){ ..... 

Der Ausgang wäre:

  • 1: Fordert "1 - TOTAL Anzahl der Angaben: "

  • 2: Eingabeaufforderungen "2 - LOOPING".

  • 3: Prompts "NUMBER 4" (weil es nicht product.variants[0].sku jetzt finden kann).

-

Jede Idee, warum die beiden Parameter sind widersprüchlich? Jede Hilfe würde sehr geschätzt werden!


EDIT:

Update auf meine Fortschritte: Ich ging weiter und entfernt den zweiten Parameter, so dass ich nur eine JSON Antrag stellen, und haben nur den cart Parameter. Da ich Scripting für Shopify benutze (mit Liquid), ging ich weiter und versuchte, ein Liquid-Objekt zu verwenden, um die Produkt-SKU zu erhalten, anstatt sie aus dem JSON des Produkts zu holen. Zu meiner Überraschung funktioniert es, solange ich das Liquid-Objekt in Anführungszeichen setze. Ich sehe wie folgt nun:

$.when($.getJSON(_config.shopifyAjaxCartURL)).done(function(cart){ 

      alert ('1 - TOTAL ITEM COUNT: ' + cart.item_count);            

      for (var i = 0; i <= cart.item_count; i++) {  

      alert ('2 - LOOPING'); 

      if (cart.items[i].sku == "{{product.variants[0].sku}}") { 
       productQuantity = cart.items[i].quantity; 
       alert ('3 - FOUND IT'); 
      } 

      } 

      alert ('NUMBER 4'); 

jedoch, obwohl es perfekt nun durch die Schleife geht, überspringt es ganz den restlichen Code.Der Ausgang ist wie folgt:

  • 1: Prompts "1 - TOTAL ITEM COUNT: "

  • 2: Prompts "2 - Looping".

  • 3: Eingabeaufforderungen "3 - FOUND IT!"

...... und es geht nie auf Nummer 4. Ich vermute, es ist, weil die Anführungszeichen um den Rest der Zeile auskommentieren, nach „{{product.variants [0] .sku}} "; Es scheint so, als würde der Inhalt "{{...}}" nicht vollständig zwischen Anführungszeichen gezählt werden.

Wissen Sie, warum das sein kann?

+1

Haben Sie versucht, jeden der beiden Parameter unabhängig oder nur den ersten auszuführen? – BobRodes

+0

Vielen Dank für Ihre Antwort, ich habe die zweite unabhängig voneinander versucht, funktioniert auch gut, wenn es alleine ist. – MigsO

Antwort

0

Es gibt einen Unterschied zwischen .then und .done. Sie versuchen, die Funktionalität von .done zu verwenden, aber Sie verwenden .then. Ich schlage vor, versuchen .done. Auch hier einige weiteren Informationen:

jQuery deferreds and promises - .then() vs .done()

+0

Vielen Dank für Ihre Antwort, ich habe versucht ".done" vor ".then", mit den gleichen Ergebnissen, ich fürchte:/ – MigsO

+0

Bisher ist es offensichtlich, dass 'Warenkorb' nicht korrekt an die übergeben wird Schleife. Ich arbeite immer noch daran, warum das so wäre. – iHowell

+0

Es ist in der Tat seltsam - Gibt es einen Grund, warum der zweite Parameter es so machen würde? – MigsO

0

ich das unmittelbare Problem gelöst, indem ein break auf der if() Klausel setzen (während ich vorher versucht hatte, return false an der gleichen Stelle). Hier ist, wie es aussieht:

$.when($.getJSON(_config.shopifyAjaxCartURL)).done(function(cart){ 

     alert ('1 - TOTAL ITEM COUNT: ' + cart.item_count);            

     for (var i = 0; i <= cart.item_count; i++) {  

     alert ('2 - LOOPING'); 

     if (cart.items[i].sku == "{{product.variants[0].sku}}") { 
      productQuantity = cart.items[i].quantity; 
      alert ('3 - FOUND IT'); 
      break; 
     } 

     } 

     alert ('NUMBER 4'); 

Schließlich ist der Ausgang:

  • 1: Fordert "1 - TOTAL ITEM COUNT: 92"
  • 2: Prompts "Looping"
  • 3: Prompts "FOUND IT"
  • 4: Prompts „NUMBER 4“

Was jetzt für meine Zwecke funktioniert, aber ich verstehe immer noch nicht, warum die beiden Parameter auf der $.WHEN Funktion wurden sie ungültig zu machen. Hat jemand Einblick in dieses spezielle Problem?