2017-03-27 2 views
0

Ich versuche, meine $ _POST Wert in der Alarmbox mit jQuery AJAX-Funktion, aber der $ _POST Wert von meinem PHP-Controller ist immer leer und ich bekomme immer ein leeres Array in der Antwort.

Ich bin mit PHP ab Version 5.5, jQuery-Version 2.2.3

(ich habe mehrere Varianten der möglichen Lösungen für dieses Problem versucht, aber ich kann immer noch nicht die richtige Art und Weise zu beheben diese finden).

1. Dies ist mein AJAX-Code (ich habe gemacht nicht mit Funktion einreichen, ich bin nur einige Inhalte auf meiner Web-Seite ohne Umleitung Aktualisierung):

$.ajax({ 
       method: 'POST', 
       url: '../OrganizationController.php', 
       dataType: "json", 
       contentType: "application/json", 
       data: {'myForm':$('#myForm').serialize()}, 
       success: function(data){ 
        alert(data); 
       }, 
       error: function(xhr, desc, err){ 
        console.log(err); 
       } 
      }); 

2. Es meine einfache PHP-Controller ist:

<?php 

include('../mysql_conn.php'); 

$value; 
if ($_POST['myForm']) { 
    $value= $_POST['myForm']; 
    header('HTTP/1.1 200 OK'); 
} else { 
    header('HTTP/1.1 500 Internal Server Error'); 
} 

header('Content-Type: application/json'); 
echo json_encode($value); 
... 
?> 

3. Meine einfache Form:

<form id="myForm"> 
    <input type="text" name="name" title="Name"/> 
    <input type="button" name="click">Press</input> 
</form> 

Controller funktioniert. Wenn ich eine Antwort mit meiner Eingabe oder einem Testtext ausgeben möchte - alles funktioniert und ich bekomme Text in der Erfolgsalarmbox.

Ich habe verschiedene Möglichkeiten ausprobiert und sah fast alle Antworten für ähnliche Probleme.

ich gelöscht datatype versucht haben, versucht, es zu Text zu ändern versucht content, fügte ein Objekt, um Daten zu entfernen, wie in vielen Antworten Menschen geraten, es mit einfachen Werten wie getestet {‘ Name ': John} usw., versucht, eine sehr einfache Form mit einer Eingabe und Text-Feld zu machen. Nichts half.

Frage:

beraten Sie gerne für dieses Problem oder ein kleines Beispiel mit meinem Code oder mit anderem ähnlichem Code mit möglicher Lösung für mein Problem?

Edit:

Wir haben eine sehr informative discussion, aber leider keine dieser Lösungen geholfen. Aber jetzt haben wir verstanden, dass in den anderen Browsern oder Rechnern alles gut funktioniert und das Problem ernster sein kann (in Konfigurationen usw.).

+0

Sie können entfernen 'contentType:" application/json ",' –

+0

Ich habe dies bereits versucht und entfernen Sie es immer noch nichts. –

+0

'Methode: 'POST',' ---> 'Typ: 'post'' –

Antwort

0

Ich endlich fand die Lösung!

Drei Tage habe ich versucht, dieses Problem zu beheben. Ich habe PHPStorm IDE v.2016.1 mit einem eigenen Build-in-Server verwendet.

Also wenn ich auf den XAMPP mit seinem eigenen Apache-Server gewechselt habe - das Problem wurde gelöst. Alles funktioniert in verschiedenen Varianten, also war das Problem nicht in meinem Code. Ich fand, dass this is the real bug in PHPStorm

Um dieses Problem zu lösen: auf einen anderen Server wechseln Sie einfach und nicht PhpStorm P. S. verwenden selbst wenn ich mehrere Server in meiner PHPStorm IDE gewechselt habe - das Problem wurde nicht gelöst, also sei vorsichtig.

1

Das Problem liegt daran, dass Sie formcodierte Daten in einem JSON-Objekt platzieren. Abgesehen davon, dass dies überflüssig ist, verwirren Sie Ihren PHP-Code.

Um das Problem zu beheben, senden Sie einfach das serialisierte Formular und verwenden Sie $_POST, um die gesendeten Felder wie gewohnt abzurufen.

$.ajax({ 
    method: 'POST', 
    url: '../OrganizationController.php', 
    dataType: "json", 
    data: $('#myForm').serialize(), 
    success: function(data){ 
     alert(data); 
    }, 
    error: function(xhr, desc, err){ 
     console.log(err); 
    } 
}); 
if ($_POST['input-field-name-here']) { 
    // do something with the data here... 

    header('HTTP/1.1 200 OK'); 
} else { 
    header('HTTP/1.1 500 Internal Server Error'); 
} 
+0

Danke Rory McCrossan für deine Antwort, aber ich habe diese Variante schon ausprobiert und probiere das nochmal aus, nachdem du antwortest und noch nichts. Ich bekomme einen leeren POST und den Header-Fehler 500. –

3

In Ihrer PHP-Datei können Sie nur die Eingabeparameter mit ihrem Namen abrufen.Wenn Sie in Ihrer Form E-Mails oder Telefonnummern haben und diese an Ihre Controller-Datei senden, dann erhalten Sie sie in ihrem Namen in Ihrer Controller-Datei anstelle des Formularnamens.

Hier ist der richtige Code, dies zu tun:

$.ajax({ 
    method: 'POST', 
    url: 'test.php', 
    dataType: "json", 
    data: $('#myForm').serialize(), 
    success: function(data) { 
     alert(data); 
    }, 
    error: function(xhr, desc, err) { 
     console.log(err); 
    } 
}); 

Und in der PHP-Datei, erhalten Sie die Werte wie

<?php 
if ($_POST['name']) { 
    $value= $_POST['name']; 
} else { 
    header('HTTP/1.1 500 Internal Server Error'); 
} 

header('Content-Type: application/json'); 
echo json_encode($value); 
?> 

Hier Ich gehe davon aus, dass E-Mail ein Feld in der Form ist.

Versuchen Sie dies!

Edit: Nur ersetzt POST-Parameter in PHP-Datei, weil ich sah, dass "Name" eines der Felder in Ihrem Formular ist. Prost!

P.S: contentType: Anwendung/Json funktioniert manchmal nicht. Hier können Sie einige Threads darauf sehen: Github Thread

+0

Danke für Ihre Antwort. Ich habe alle Ihre Varianten versucht, aber POST ist immer noch leer und ich habe einen 500 Fehler. Es gab eine lange Diskussion mit Masivuye Cokile und in seinem Browser funktioniert alles gut, aber in meinem habe ich diesen Fehler ... komisch ... –

+0

@AlexeyShabramov Kannst du es mir auf Skype oder anderen IM zeigen? –

+0

Danke für Ihre Antwort, aber ich habe bereits die Lösung gefunden ... und es war der IDE-Fehler. Als ich zu einer anderen IDE und einem anderen Server wechselte, begann alles gut zu funktionieren. –