per JavaScript remote JSON oder XML auslesen?
lima-city → Forum → Die eigene Homepage → HTML, CSS & Javascript
abfrage
ansehen
ausgabe
beispiel
code
datei
datum
email
entfernten server
ergebnis
header
hinweis
http
idee
juristisches problem
problem
senden
server
url
verhindern
-
Hallo
wie kann ich mit JavaScript eine JSON (oder XML) Datei (von fremdem Server) auslesen ?
ich möchte auf einem Webspace, bei dem allow_url_fopen = off ist
eine API abfragen, und das Ergebnis dann mit PHP verarbeiten.
dazu muss ich aber die API zuerst per JavaScript abfragen,
weil der Webspace weder curl noch allow_url_fopen an hat.
Beispiel: JSON
Beispiel: XML
soweit das Ergebnis auch durch JS angekommen ist, kann ich ja
die Daten an eine PHP-Datei (intern) weiterleiten (per ajax)
und dann dort verarbeiten, wenn appears==1 dann User blocken
Wie kann ich also externe (remote) JSON oder XML Daten per JavaScript abholen ?
... egal welches Format, hauptsache es funktioniert (es kommt was an)
und, wenn JSON, dann besser mit callback function oder ohne ? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hi,
ich würde die Vorschlagen dafür jQuery zu verwenden. Es ist mit Low-Level Javascript zwar auch möglich, jedoch muss man viel beachten, wenn man will, dass es in allen Browsern funktioniert. Ein Beispiel mit jQuery:
<!DOCTYPE html> <html> <head> <script src="http://code.jquery.com/jquery-latest.js"></script> </head> <body> <script> $.getJSON("http://www.stopforumspam.com/api?email=krillxcg@gmail.com&ip=125.78.241.11&f=json&callback=?", function(json) { alert("JSON Data: " + JSON.stringify(json)); }); </script> </body> </html>
€dit: Beispiel: http://hack-center.de/stuff/json.html
Beitrag zuletzt geändert: 28.2.2013 9:58:10 von kochmarkus -
Du dürftest trotzdem wenn du per JavaScript im Browser deines Benutzers auf einen entfernten Server zugreifst Probleme mit der Same-Origin-Policy bekommen.
Das lässt sich dadurch umgehen, indem im Header des Servers, den du aufrust eine explizite Erlaubnis ausgesprochen wird. Der Header muss dann folgende Zeile enthalten:
Access-Control-Allow-Origin: http://webfav.lima-city.de -
mlrecords schrieb:
Du dürftest trotzdem wenn du per JavaScript im Browser deines Benutzers auf einen entfernten Server zugreifst Probleme mit der Same-Origin-Policy bekommen.
Das lässt sich dadurch umgehen, indem im Header des Servers, den du aufrust eine explizite Erlaubnis ausgesprochen wird. Der Header muss dann folgende Zeile enthalten:
Access-Control-Allow-Origin: http://webfav.lima-city.de
Nö, klicke meinen Testlink an und schau dir den Quellcode an. Gibt ein der Stelle keine Probleme, da jQuery wohl JSONP für getJSON verwendet.
€dit: Zitat von der jQuery Webseite:JSONP
If the URL includes the string "callback=?" (or similar, as defined by the server-side API), the request is treated as JSONP instead. See the discussion of the jsonp data type in $.ajax() for more details.
Beitrag zuletzt geändert: 28.2.2013 11:04:52 von kochmarkus -
ok, vielen Dank
ich habe es sogar hinbekommen, die Daten (JSON) per POST an eine .php Datei zu senden,
und das Ergebnis der Prüfung (plus DEBUG) in einem DIV id="ausgabe" wieder auszugeben
Die Datei: sfs_check1.php
<html> <head> <title>SFS Check</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <script src="http://code.jquery.com/jquery-latest.js" type="text/javascript"></script> <script type="text/javascript"> var sfs_params = 'email=krillxcg@gmail.com&ip=125.78.241.11'; $.getJSON("http://www.stopforumspam.com/api?" + sfs_params + "&f=json&callback=?", function(data) { $.each(data, function(key, val) { $('#ergebnis').append("<br />" + key + " --- " + val + "\n"); }); data.request = sfs_params; var json_str = JSON.stringify(data); $.post('sfs_check2.php', {sfsres : json_str} ).done(function(pdata) { $('#ausgabe').html(pdata); }); }); </script> </head> <body bgcolor="#FFFFFF" text="#000000"> <br /> <br /> <div id="ausgabe"> </div> <br /> <br /> <?php echo $spammer; ?> <br /> <br /> </body> </html>
ich bekomme aber eben "nur" die Ausgabe der sfs_check2.php im DIV id="ausgabe"
leider kann ich so nicht weiter mit dem Ergebnis (Variablen) arrbeiten, nur "ansehen"
die Ausgabe
ergibt einen Fehler:echo $spammer;
Notice: Undefined variable: spammer in ....
logisch, weil ja nur der fertige (HTML) Inhalt der sfs_check2.php ausgegeben wird
und keine Variablen zurück übergeben werden ...
Die Datei: sfs_check2.php
<?php // ------------------------------------------------------- if (!empty($_POST['sfsres'])) { $sfs_data = json_decode($_POST['sfsres']); $spammer = 'nein'; if ($sfs_data->email->appears == 1) { $spammer = 'ja'; } if ($sfs_data->ip->appears == 1) { $spammer = 'ja'; } // ---------------------------------------- print "<br />\n"; print "<br />SPAMMER: <strong>".$spammer."</strong> \n"; print "<br />\n"; // ---------------------------------------- print "<br />DEBUG: \n"; print "<br />\n"; print "<pre>\n"; print_r($sfs_data); print "</pre>\n"; print "<br />\n"; print "<br />\n"; } // ------------------------------------------------------- ?>
wie gesagt, das Ergebnis / die Ausgabe von sfs_check2.php kann ich mir "ansehen"
aber die Variable ist nicht der Abfrage-Datei sfs_check1.php als Variable verfügbar.
wie kann ich jetzt aber für den Fall
reagieren,$spammer = 'ja';
also den User-Anmelde Prozess abbrechen und evtl Log dazu speichern, etc.
PS: hatte die Idee, wenn in der sfs_check2.php das Ergebnis
ist,$spammer = 'ja';
dann per header("location: ...") den Abbruch zu erzwingen, aber das geht leider auch nicht,
weil "headers already sent ..." Fehler kommt.
jemand noch ne Idee, wie ich mit dem Ergebnis ob ]$spammer = 'ja' oder 'nein' weiter arbeiten kann ?
EDIT: ... habe gerade noch ne Idee: ...
was haltet Ihr von
in sfs_check2.php bei Treffer,$_SESSION['spammer'] = "ja";
darauf sollte ich ja dann auch in der Abfrage-Datei sfs_check1.php wieder zugreifen können ?!
oder?
Beitrag zuletzt geändert: 28.2.2013 11:19:19 von webfav -
Hallo webfav,
webfav schrieb:
ok, vielen Dank
ich habe es sogar hinbekommen, die Daten (JSON) per POST an eine .php Datei zu senden,
und das Ergebnis der Prüfung (plus DEBUG) in einem DIV id="ausgabe" wieder auszugeben
<script type="text/javascript"> var sfs_params = 'email=krillxcg@gmail.com&ip=125.78.241.11'; $.getJSON("http://www.stopforumspam.com/api?" + sfs_params + "&f=json&callback=?", function(data) { $.each(data, function(key, val) { $('#ergebnis').append("<br />" + key + " --- " + val + "\n"); }); data.request = sfs_params; var json_str = JSON.stringify(data); $.post('sfs_check2.php', {sfsres : json_str} ).done(function(pdata) { $('#ausgabe').html(pdata); }); }); </script>
Mein Beitrag beschäftigt sich nicht mit einer Optimierung deines Codes.
Vielmehr möchte ich auf ein juristisches Problem hinweisen.
Um Spam zu verhindern, überträgst du Userdaten an stopforumspam.
Firma und Server sind in den USA beheimatet, unterliegen also US-Amerikanischem Recht.
Innerhalb der EU besteht eine andere Rechtsauffassung bezüglich des Datenschutzes.
WordPress verwendet das Plugin "Akismet", um Spamming zu verhindern.
Wie bei dir, werden Benutzerdaten an einen Server in den USA übertragen und überprüft.
Um eventuellen Abmahnungen zu entgehen empfehle ich dir folgenden Artikel:
Datenschutz und Akismet
Mfg,
timebandit
Beitrag zuletzt geändert: 3.3.2013 22:03:00 von timebandit -
timebandit schrieb:
... Vielmehr möchte ich auf ein juristisches Problem hinweisen ...
Vielen Dank für den Hinweis,
da werde ich wohl besser ein ein Opt-In (Checkbox / Kontrollkästchen) bei Anmeldung einbauen.
[X] Ich erkläre mich damit einverstanden, daß eingegebene Daten (Username, Email und IP-Adresse) nur zum Zweck der Spamvermeidung durch einen Dienst in den USA überprüft und gespeichert werden. Weitere Informationen zum Dienst ... hier.
mit Link zu stopforumspam bei dem Wort "hier" am Ende des Textes.
dann habe ich 2 Opt-In, a) für diesen Anti-Apam-Check und b) für die Nutzungsbedingungen
PS:
Wenn ich den Text auch in die Nutzungsbedingungen (die ebenfalls über Opt-In bestätigt werden müssen) mit rein schreibe, dann sollte doch auch ein einziger Opt-In (Checkbox) für die Nutzungsbedingungen ausreichen, oder soll ich lieber beide einzeln lassen ?
Beitrag zuletzt geändert: 6.3.2013 10:35:52 von webfav -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage