2017-07-12 6 views
0

habe ich mit JSON stecken, der Client-Seite Code:Javascript: sendind json Daten über Ajax php

$.getJSON('http://freegeoip.net/json/?callback=?', function(userData) { 
       console.log(JSON.stringify(userData, null, 2)); 
       }); 

      $.ajax({ 
        type: "POST", 
        url: "listener.php", 
        data: JSON.stringify($.userData), 
        success: function(res) {  
        alert(res); 
        } 
      }) 

und PHP-Server-Side-Code:

$data = json_decode($_POST['userData']); 
$response = 'I got parameters '.count($data).'\n'; 
foreach ($data as $key=>$value) { 
    $response .= 'key: '.$key.'; value: '.$value.'\n'; 
} 
echo $response; 

der Punkt ist, dass ich nicht bekam Fehler aber sieht aus wie php hat keine Daten oder kann es nicht serialisieren, ich habe gerade begonnen, Web-Programmierung zu lernen, und ich werde mich freuen, um jeden Rat, danke!

+0

Warum verwenden Sie? Rückruf = ?. Verwenden Sie einfach ** http: //freegeoip.net/json/** und $ .userData ist falsch. Sie müssen eine globale Variable zuerst in getJSON erstellen. userDataGlobal = userData ... Und benutze es normalerweise ** data: JSON.stringify (userDataGlobal), ** – Roy

Antwort

0

Javascript:

$.getJSON('http://freegeoip.net/json/', function(userData) { 
     console.log(JSON.stringify(userData, null, 2)); 
     $.ajax({ 
       type: "POST", 
       url: "listener.php", 
       data: userData, 
       success: function(res) { 
        alert(res); 
       } 
     }) 
}); 

PHP:

$data = $_POST; 
$response = 'I got parameters '.count($data).'\n'; 
foreach ($data as $key=>$value) { 
    $response .= 'key: '.$key.'; value: '.$value.'\n'; 
} 
echo $response; 
  1. Sie sollten den Rückrufparameter entfernen oder zumindest das Fragezeichen entfernen.
  2. Sie sollten die Ajax-Anfrage innerhalb des getJSON Callbacks senden. Ansonsten läuft es parallel ... und weiß nichts über userData.
  3. Sie sollten Ihre Ergebnisse nicht stringifizieren, so erhalten Sie ein funktionierendes Array in PHP.

Hinweis: Für weitere Nutzung (zum Beispiel in Datenbankabfragen), sollten Sie Daten escape erhalten Injektionen zu vermeiden!

+1

Danke Andre - du hast sehr geholfen! –

0

JavaScript:

$.ajax({ 
    type: "POST", 
    url: "listener.php", 
    data: {'foo':'bar'}, 
    success: function(res) {  
    alert(res); 
    } 
}); 

PHP:

$data = $_POST; 
$response = 'I got parameters '.count($data).'\n'; 
foreach ($data as $key=>$value) { 
    $response .= 'key: '.$key.'; value: '.$value.'\n'; 
} 
echo $response;