2010-11-23 8 views
2

Ich versuche, JSON-Daten von einem Remote-Server aufzurufen, aber der Server gibt keine gültigen JSONP-Daten zurück, sondern nur gültige JSON-Daten. (bestätigt mit Validatoren)getJSON Remote-Anfrage ohne JSONP - Server

Wenn ich die getJSON Anfrage (mit & Rückruf =?), bekomme ich die gültige JSON zurückgegeben, aber es löst nicht die Callback-Funktion, weil es nicht gültig JSONP ist.

Gibt es eine gute Möglichkeit, Zugriff auf die zurückgegebenen JSON-Daten zu erhalten?

+0

Haben Sie die Kontrolle über den Remote-Server? Können Sie den Remote-Server nicht über Ihr Server-Skript aufrufen? – Philar

+0

Wenn Sie auch bitte die URL des Remote-Servers erwähnen können – Philar

+0

Ich bin mir sicher, wenn ich es erwähnen darf, also besser ich nicht. Und ich habe auch keinen Zugriff auf den Server, nur auf die JSON-Daten. – Tim

Antwort

2

Nein, es müssen JSONP-Daten sein, weil das Ganze funktioniert, es beinhaltet im Grunde genommen eine JavaScript-Datei durch Erstellen eines <script> Tags ... und diese Antwort muss gültig sein JavaScript, ein Objektliteral (für sich) ist kein gültiges JavaScript.

Denken Sie daran eine andere Möglichkeit: Wenn wir könnte JSON von einem Remote-Server erhalten, warum würde JSONP existieren? :)

+0

Nun, wenn es nicht so funktioniert, muss ich vielleicht PHP verwenden, um die JSON-Daten zu erhalten und PHP zu js übergeben. Wollte es vermeiden, aber scheint dies der einzige Weg in diesem Fall. – Tim

+0

@Tim - yup, ein Proxy ist die einzige andere Alternative, wenn sie JSONP nicht unterstützen, überprüfen Sie, dass sie kein anderes Format verwenden, um den Callback zu spezifizieren, einige benutzen 'jsonpcallback =' oder 'jsoncallback =' oder a völlig anderes URL-Format –

1

Nun vor allem, wenn Ihr Server Ihre JSON von JSONP nicht unterstützt, dann werden Sie einen Proxy verwenden müssen. Wenn es JSONP unterstützt, sollten Sie Ihre Anfrage ein wenig wie im folgenden Beispiel formatieren. Wenn Sie nicht über einen Rückruf in der $ .getJSON angeben (? ... & Rückruf =) dann sieht Ihre Anfrage wie folgt aus:

http://someurl?callback=123489234982 

mit etwas lächerliche Zahl am Ende davon und es macht Ihnen das Leben ein Schmerz. Also, sollten Sie einen Rückruf angeben und formatieren Sie den Code wie folgt aus:

<script> 
    $.getJSON("your url?callback=callbackName", ....); 

    function callbackName { do what you want with the json in here } 
</script> 

wenn das nicht funktioniert, dann Ihr Server JSONP nicht unterstützt :(hier ist ein Link zu einem PHP-Proxy Sie nutzen können, dass ist ziemlich gut und hat viele der Dokumentation.

http://benalman.com/projects/php-simple-proxy/

2

Ja, es ist scheiße. ich bin mit dem Viddler API (Browser-Seite) das gleiche Problem haben. es ist das Senden von JSON-Daten zurück, aber nicht in scripted JSON -P-Schnittstelle

So haben Sie zwei op :

  1. Wie die Leute gesagt haben, verwenden Sie einen Back-End-Proxy, um Anfragen serverseitig zu machen.
  2. Wenn Sie nur einen Browser (Chromium in meinem Fall) unterstützen müssen, verwenden Sie so etwas wie "Chrom-Browser --disable-web-security", um die "self-origin-policy" Regel zu deaktivieren. Auf diese Weise können Sie domänenübergreifende Anfragen erstellen, jedoch nur für diese spezielle Situation.

Viel Glück Mann!