2016-11-02 32 views
0

Ich habe die folgende Konfiguration: Zwei lokale Domänen 192.168.30.1 -> Webserver mit den JSON-Daten und 169.254.168.105: 3000, wo ich mit den Daten arbeiten möchte.Javascript JSON-Daten von Url über Jquery

Der Webserver zeigt die Daten via PHP an und Sie müssen authentifiziert werden, um die Daten zu sehen. So sieht die URL wie folgt aus: „http://192.168.30.1/rest/activity14?auth_username=username&auth_password=password
Und wenn ich dies in einem Browser eingeben eine folgende Ausgabe:

{ 
    people: [ 
     { 
      id: "58107d10ad910", 
      name: "name" 
     } 
    ], 
    documents: [ 
     { 
      document_id: "5811f9b306216", 
      name: "document1" 
     } 
    ] 
} 

Ich muss mit dieser auf der anderen Domäne arbeiten. Also habe ich versucht, die Daten über jQuery Ajax zu bekommen, aber es scheint, dass ich es nicht bekommen kann, egal was. Ich versuchte, den folgende ajax Anruf:

$.ajax({ 
    type: "GET", 
    url: $url, 
    dataType: 'json', 
    success: function(data) { 
     console.log("success"); 
    }, 
    error: function(e) { 
     console.log("Error: " + e); 
    } 
}); 

, die in der Konsole zu einem Fehler führt ("Fehler: [object Object]").

Also habe ich mit verschiedenen Ansätzen versucht. Ich versuchte getJSON:

$.getJSON($url, function(data) { 
    console.log("success"); 
}).error(function(e) { 
    console.log(e); 
}); 

die nicht einmal eine Fehlermeldung gab.

Ich habe auch über Jsonp gelesen und es für domainübergreifende json Anrufe verwenden. Der folgende Ansatz

function logResults(json) { 
    console.log("json" + json); 
} 

$.ajax({ 
    url: $url + "callback=logResults?", 
    dataType: "jsonp", 
    jsonpCallback: "logResults", 
    error: function(e) { 
     console.log("Error: " + e); 
    } 
}); 

, die auch nicht funktioniert. Im deloper Tool Netzwerk-Registerkarte fand ich folgende über den JSONP Anruf (Status: gestempelt):

General: 
Request URL:http://192.168.30.1/rest/activity14? auth_username=kusername&auth_password=password&callback=logResults?&callback=logResults&_=1478083606031 

Request Headers: 
Provisional headers are shown 
Referer:http://169.254.168.105:3000/ 
User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36 

Query String Parameters: 
auth_username:username 
auth_password:password 
callback:logResults? 
callback:logResults 
_:1478083606031 

ich nicht wirklich diese interpretieren kann, aber vielleicht hilft es, mein Problem zu finden.

Was wäre der richtige Ansatz für meinen speziellen Fall und wenn ich schon auf dem richtigen Weg wäre, was habe ich am Ende falsch gemacht?

Edit:
Hier ist die Ausgabe im DevTools Registerkarte Netzwerk für die normale JSON Anfrage (nicht die JSONP Anfrage):

General: 
Request URL:https://rippleapi.herokuapp.com/xhr_proxy?tinyhippos_apikey=ABC&tinyhippos_rurl=http%3A//192.168.33.10/rest/activity14%3Fauth_username%3Dusername%26auth_password%3Dpassword 

Request Headers: 
Provisional headers are shown 
Access-Control-Request-Headers:x-ripple-user-agent 
Access-Control-Request-Method:GET 
Origin:http://169.254.168.105:3000 
Referer:http://169.254.168.105:3000/ 
User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36 

Query String Parameters: 
tinyhippos_apikey:ABC 
tinyhippos_rurl:http://192.168.33.10/rest/activity14?auth_username=username&auth_password=password 
+0

Die 'getJSON'-Version gibt keinen Fehler, weil die Versprechen Version von * Fehler * ist' fail' Methode, nicht 'Fehler'. Versuchen Sie auch, das 'e' selbst zu" konsolen ". Verbinden Sie es nicht mit" Error: "'. Ich meine etwas wie 'console.log (" Error ", e)' würde es tun. Dann können Sie das Fehlerobjekt in der Konsole überprüfen und eine bessere Vorstellung davon haben, was passiert. –

+0

@kk_, du hast gesagt, dass wenn du die erste Methode von 'AJAX' verwendest, du' Error: [object Object] 'bekommst. Das heißt, Sie reagieren auf den Fehlerrückruf. Dann bedeutet das wahrscheinlich, dass etwas mit dem serverseitigen Code nicht stimmt. – Ionut

+0

@ ZoltánTamási Ich habe den Fehler console.log geändert und die Ausgabe ist "Objekt {readyState: 0, responseText:" ", Status: 0, statusText:" Fehler "}" was nicht wirklich hilft, oder? –

Antwort

0

Der Endpunkt, die Sie sollten zurückkehren abfragen codierte Objekt kein analysiert ein . Wenn Sie PHP verwenden, versuchen Sie json_encode()

+1

Also vorher schrieb ich nicht den PHP-Controller, der die JSON-Daten sendet (ich kann es aber ändern). Aber mit dem, was ich sehen kann, geschieht dies bereits. Das Zend-Framework wird verwendet und eine Methode "$ this-> sendJson (['people' => $ people, 'documents' => $ documents]);" wird genannt. Und mit dem, was ich sehen kann, ist dieser Teil der gleiche wie json_encode() (https://framework.zend.com/manual/1.12/en/zend.controller.actionhelpers.html Zitat: "Die Verwendung ist einfach: entweder nennen Sie es als Methode des Hilfsmaklers, oder rufen Sie eine der Methoden encodeJson() oder sendJson() auf ") –

+0

1.Ich kopierte Ihre Browser-Ausgabe und führte eine JSON.stringify() -Funktion darauf aus. Das Ergebnis unterscheidet sich von Ihrer Liste: '{" people ": [{" id ":" 58107d10ad910 "," name ":" name "}]," dokumente ": [{" document_id ":" 5811f9b306216 " , "Name": "Dokument1"}]} '. 2.Wenn Sie die Dinge 'console.log ('error' + e)' protokollieren, wäre es besser, wenn Sie 'console.log ('error', e)' - coma anstelle von plus protokollieren, andernfalls wird der Fehler in konvertiert string [Objektobjekt] anstelle des tatsächlichen Objekts. Vielleicht gibt uns das mehr Informationen über den tatsächlichen Fehler. Sie können auch Request-Response im Browser sehen, vor JS –

+0

Zu 1.) Entschuldigung, ich habe nicht erwähnt, dass meine Ausgabe von einem Chrome-Plugin geändert wurde ("JSON View" - ich wusste nicht, dass es die Syntax ändert) . Ich habe es deaktiviert und bekomme genau die gleiche Ausgabe, die du jetzt gepostet hast: {"people": [{"id": "58107d10ad910", "name": "name"}], "dokumente": [{"document_id": "5811f9b306216 "," name ":" document1 "}]} Zu 2.) Ich habe es gestern gestern geändert und dies ist die Ausgabe des Objekts:" Object {readyState: 0, responseText: "", status: 0, statusText: "error "}" - aber ich denke, das hilft auch nicht wirklich –

Verwandte Themen