kostenloser Webspace werbefrei: lima-city


per JavaScript remote JSON oder XML auslesen?

lima-cityForumDie eigene HomepageHTML, CSS & Javascript

  1. Autor dieses Themas

    webfav

    webfav hat kostenlosen Webspace.

    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 ?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. kochmarkus

    Co-Admin Kostenloser Webspace von kochmarkus

    kochmarkus hat kostenlosen Webspace.

    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
  4. 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
  5. kochmarkus

    Co-Admin Kostenloser Webspace von kochmarkus

    kochmarkus hat kostenlosen Webspace.

    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
  6. Autor dieses Themas

    webfav

    webfav hat kostenlosen Webspace.

    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
    echo $spammer;
    ergibt einen Fehler:
    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
    $spammer = 'ja';
    reagieren,
    also den User-Anmelde Prozess abbrechen und evtl Log dazu speichern, etc.

    PS: hatte die Idee, wenn in der sfs_check2.php das Ergebnis
    $spammer = 'ja';
    ist,
    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
    $_SESSION['spammer'] = "ja";
    in sfs_check2.php bei Treffer,
    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
  7. 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
  8. Autor dieses Themas

    webfav

    webfav hat kostenlosen Webspace.

    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
  9. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!