2016-05-07 16 views
2

Ich möchte ein Eingabefeld haben, das Börsenticker vorschlägt, wenn der Benutzer Buchstaben eingibt, wie Sie es auf Yahoo oder Google Finance sehen. Ich kann nicht einfach JSON verwenden, wenn ich CORS nicht aktiviere. In diesem Fall funktioniert es. Hier ist Code, den ich aus verschiedenen Fragen zusammengestellt habe, die ich auf Stack Overflow (here und here) gefunden habe, während ich das Problem untersucht habe, dem ich gegenüber stehe.400 fehlerhafte Anfrage bei JSONP-Anfrage an Yahoo Finance API erhalten

$("input#stocklookup").autocomplete({ 
    source: function(request, response){ 
     $.ajax({ 
      url: 'http://d.yimg.com/autoc.finance.yahoo.com/autoc?query='+request.term+'&region=US&lang=en-US', 
      dataType: 'jsonp', 
      jsonpCallback: 'YAHOO.util.ScriptNodeDataSource.callbacks' 
     }); 

     YAHOO = { 
      util: { 
       ScriptNodeDataSource: { 
        callbacks: function(data) { 
         console.log(data); 
        } 
       } 
      } 
     }; 
    } 
}) 

Suche nach ‚a‘, werde ich einen 400-Fehler erhalten und die URL aufgeführt wird als http://d.yimg.com/autoc.finance.yahoo.com/autoc?query=a&region=US&lang=en-US&callback=YAHOO.util.ScriptNodeDataSource.callbacks&_=1462660878200

ich die zusätzlichen Zahlen am Ende denken, was die 400 verursacht werden kann, aber ich don Ich weiß nicht, warum es an die URL angehängt wird. Wenn Sie zu der obigen URL navigieren, werden die Ergebnisse in Ihrem Browser ordnungsgemäß angezeigt.

Ich habe auch versucht, diesen Code-Block nach dem Sehen dieser Seite in der learn jQuery Docs, aber ich bekomme auch einen Fehler 400 mit dieser.

Jegliche Hilfe, um mich in die richtige Richtung zu bringen, würde geschätzt werden. Vielen Dank.

aktualisieren

$.ajax({ 
      url: 'http://d.yimg.com/autoc.finance.yahoo.com/autoc?query='+request.term+'&region=US&lang=en-US', 
      cache: true, //<--new 
      dataType: 'jsonp', 
      jsonpCallback: 'YAHOO.util.ScriptNodeDataSource.callbacks' 
     }); 

     YAHOO = { 
      util: { 
       ScriptNodeDataSource: { 
        callbacks: function(data) { 
         console.log(data); 
        } 
       } 
      } 
     }; 

dies für einige Anfragen funktioniert, andere aber nicht, kehren einige noch einen 400-Status.

+0

Die zusätzlichen Sachen werden wahrscheinlich von jQuery an das Ende angehängt, nur um Browser-Caching zu verhindern. Sie können das in jQuery, einem Ajax-Aufruf, ausschalten, aber das Zwischenspeichern der JSONP-Anfrage/-Antwort könnte Sie in Unordnung bringen. – jfriend00

+1

FYI, wenn Sie nur dies in Ihrem Browser eingeben: 'http://d.yimg.com/autoc.finance.yahoo.com/autoc?query=a®ion=US&lang=en-US&callback=YAHOO.util.ScriptNodeDataSource.callbacks_ = 1462660878200', Sie werden eine JSONP-Antwort sehen, also glaube ich nicht, dass Ihr Fehler etwas mit dem '& _ = 1462660' Teil der URL zu tun hat. – jfriend00

+0

Danke !! Ich lege Cache ein: true in und es hat funktioniert!Caching ist kein Problem, einzelne Börsenticker ändern sich nicht oft. – jcharch

Antwort

3

Ich reparierte es!

Hinzugefügt zu meiner HTML-Datei.

<meta charset="UTF-8" name="referrer" content="no-referrer"> 
0

Nur ein Kopf - ich habe ein paar Projekte (Java und JavaScript), die diese API aufrufen. Sie arbeiten in der Regel aber gelegentlich mit einem 400 ohne Änderung des Codes - dann arbeiten Sie ein paar Stunden/Tage später wieder, ohne den Code zu ändern. Ich denke, wenn es ein Problem mit dem Server gibt, kann dies anstelle eines korrekten Fehlers in der 500-Bereich (Serverfehler - Ich bin es, nicht Sie)

Fehler in der 400-Bereich sollte eine Nachricht vom Server sein die Zeilen von "es sind Sie, nicht ich - reparieren Sie Ihre Anfrage, bevor Sie es erneut senden", aber ich denke nicht, dass dies mit dieser API der Fall ist.

Zum Beispiel - eine meiner Anfragen, die funktionierten nicht funktionierten, funktioniert und taten dann nicht sind:

http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.xchange%20where%20pair%20=%20%22USDGBP%22&env=store://datatables.org/alltableswithkeys 

in einem Browser bekomme ich die gleichen 400-Fehler, aber die folgenden XML .. ..

<error xmlns:yahoo="http://www.yahooapis.com/v1/base.rng" yahoo:lang="en-US"> 
<description> 
No definition found for Table yahoo.finance.xchange 
</description> 
</error> 

Kurz gesagt - es kann sie nicht Sie sein!