2017-07-23 5 views
0

erklärt bemerkte ich, dass der folgende Code funktioniert nicht. Wenn ich am Ende davon entferne, funktioniert es, aber ich bekomme nur Fehler. Ich folgte ihm zu jquery spec auf der Website. Irgendeine Idee warum $.post Methode wird nicht funktionieren/eingeben?

Der Grund, warum ich weiß, es wird nicht .post $ geben, weil alert(form.serialize()); doesnt aufgerufen.

In meinem PHP ich die folgende kehre zurück, wenn es Beiträge:

 $arr = array('status' => 'SUCCESS'); 

     echo json_encode($arr); 
     exit(); 

Das ist mein Ajax ist unten:

var form = $('#lines'); 
     $.post('', form.serialize(), function(json) { 
      alert(form.serialize()); 

      if(json.status === 'SUCCESS') { 
       alert(json); 
       console.log('success'); 
      } else { 
       alert(json); 
       console.log('failure'); 
      } 
     }, "json"); 

Wenn ich das json Teil am Ende entfernen, es gibt nur die gesamter HTML-Code der Seite.

Antwort

0

Ihre Antwort ist wahrscheinlich nicht json. Wenn Sie ,"json" entfernen, funktioniert es, aber geben Sie String-Daten zurück, damit Ihr Code nicht funktionieren kann (json.status on string wird nicht funktionieren). Wenn Sie ,"json" setzen, dann wird es wahrscheinlich nicht funktionieren, wenn Rückkehr nicht richtig json ist.

Was Sie tun können: verlassen „json“ am Ende, wie das ist, was Sie wollen, fügen Sie console.data(json) ; und console.data(typeof json) ; gerade am Anfang Ihrer Erfolgsfunktion.

Vergessen Sie wachsam, es zuerst das Skript zu stoppen, und es ist nicht so präzise wie Konsole. Verwenden Sie die Konsole, wenn Sie können.

kann ich vorschlagen, dass Sie es so zu schreiben, es besser lesbar zu machen:

console.log('form.serialize()',form.serialize()) ; 

    var post = $.ajax({ 
     method : 'POST', 
     url : '', 
     data : form.serialize(), 
     dataType : "json" 
    }); 

    post.done(function(json){ 

     console.log('success',json) ; 
     console.log('typeof json',typeof json) ; 

     if(json.status === 'SUCCESS') { 
      console.log('success'); 
     } else { 
      console.log('failure'); 
     } 

    }) ; 

    post.fail(function(data){ 
     console.log('fail',data) ; 
     alert('post fail') ; 
    }) ; 

Hier index.php meine komplette PHP-Datei ist. Die Struktur sollte wie deine aussehen. Beachten Sie einfach den oberen Teil, wo ich sicher bin, als wenn ich Post-Daten habe, ich Echo nur die JSON und zurück, so nichts anderes gesendet wird (wie Ihre Ausfahrt).

<?php 
    if (isset($_POST['name'])) 
    { 
     echo json_encode(array('status' => 'SUCCESS')) ; 
     return false ; 
    } 
?> 

<form> 
    <input type="text" name="name" /> 
    <input type="button" /> 
</form> 

<script 
    src="https://code.jquery.com/jquery-3.2.1.min.js" 
    integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" 
    crossorigin="anonymous"></script> 
<script> 
    jQuery('input[type="button"]').on('click',function(){ 

     var form = jQuery(this).closest('form') ; 

     console.log('form.serialize()',form.serialize()) ; 

     var post = $.ajax({ 
      method : 'POST', 
      url : '', 
      data : form.serialize(), 
      dataType : "json" 
     }); 

     post.done(function(json){ 

      console.log('success',json) ; 
      console.log('typeof json',typeof json) ; 

      if(json.status === 'SUCCESS') { 
       console.log('success'); 
      } else { 
       console.log('failure'); 
      } 

     }) ; 

     post.fail(function(data){ 
      console.log(this) ; 
      console.log('fail',data) ; 
      alert('post fail') ; 
     }) ; 
    }) ; 

</script> 
+0

zu arbeiten: es gibt nur Objekt-Objekt, wenn ich das json Teil –

+0

Was Objekt-Objekt zurückgibt entfernen? Alarm (json)? Aus diesem Grund brauchen Sie eine Konsole anstelle einer Warnung, sie ist detaillierter und Sie sehen das komplette Objekt. Hast du es mit dem folgenden Code versucht? (Ich habe es bearbeitet, es hatte einige Fehler) –

+0

Ja, ich bin gerade jetzt scheitern gerade im im Versuch, meine PHP-Ende zu überprüfen. –

0

Sie müssen die Header in Ihrem PHP-Code angeben und jQuery sagen, dass eine „json“ Antwort auf dem Weg .. hier ist der korrekte PHP-Code

header('Content-Type: application/json'); 
$arr = array('status' => 'SUCCESS'); 
echo json_encode($arr); 
exit(); 

Mitteilung der Linie, sendet json Header, versuchen sie es jetzt und es wird FYI