2017-06-14 4 views
-1

Ich versuche die Fetch-API zum ersten Mal und ich versuche, eine Variable an ein PHP-Skript POST. Ich tat das gleiche mit jQuery.ajax(), die funktioniert haben.Fetch api sendet keine POST-Daten

var myRequest = new Request('invoeren.php', {method: 'POST', body: JSON.stringify({name: name})}); 

fetch(myRequest).then(function(response) { 
    console.log(response); 
}); 

Das gibt mir Undefined index 'name' zurück.

Was mache ich falsch?

Die Arbeits jQuery-Code:

$.ajax({ 
    url: "invoeren.php", 
    method: "POST", 
    data: { name : name} 
}).done(function(msg) { 
    console.log(msg); 
}).fail(function(jqXHR, textStatus) { 
    alert("Naam is niet ingevoerd door een probleem: " + jqXHR); 
}); 

Die PHP-Script:

try { 
    $dbh = new PDO('mysql:host=localhost;dbname=ajaxoef', $user, $pass); 
    $stmt = $dbh->prepare('INSERT INTO names(name) VALUES (:name)'); 
    $stmt->bindParam(':name', $name); 

    $name = json_decode($_POST['name']); 
    $stmt->execute(); 

    echo "Naam is ingevoerd."; 
} catch (PDOException $e) { 
    print "Error!: " . $e->getMessage() . "<br/>"; 
    die(); 
} 
+0

wie wollen Sie den Wert von 'name' definiert, die –

+0

im Körper der Anforderung verwendet wird„Das gibt mir Undefined index ‚name‘.“ - Woher? Ist das die PHP-Antwort (macht das [ein Duplikat] (https://stackoverflow.com/questions/4261133/php-notice-undefined-variable-notice-undefined-index-and-notice-undef)? Ist das ein JavaScript-Fehler? – Quentin

+0

"Ich habe das gleiche mit jQuery.ajax() gemacht, was funktioniert hat" - Wie sieht der Arbeitscode aus? Es ist schwer zu sagen, was du verändert hast, was es kaputt gemacht hat, wenn wir das nicht sehen können. – Quentin

Antwort

2

Die Arbeits jQuery-Code

Daten: {name: name}

… damit Wenn Sie jQuery verwenden, senden Sie WWW URL Form Encoded data (die standardmäßige jQuery-Codierung).

body: JSON.stringify({name: name}) 

... aber wenn man holen schaltet, können Sie auch das Objekt JSON zu konvertieren.

JSON ist nicht WWW URL Form Encoded!

Sie haben vermutlich das PHP nicht neu geschrieben, um JSON zu erwarten, und versuchen wahrscheinlich, von $_POST zu lesen (was leer ist, da PHP standardmäßig keine JSON-codierten Anfragen unterstützt).

Sie können ein FormData-Objekt erstellen, das so codiert wird, dass PHP es standardmäßig parst.

var body = new FormData; 
body.append("name", name); 
//... 
body: body 
+0

Sie hatten Recht, es war das FormData-Problem! Vielen Dank –