2017-01-10 7 views
1

Ich habe eine Funktion erstellt, die zählt, wie viel Zeit ich auf einer Seite verbracht habe und woher ich kam. Ich sammle alle Daten und speichere sie in einem JSON, aber wenn ich versuche, diesen JSON über den AJAX zu senden, warnt er mich mit einer leeren Alarmbox, was bedeutet, dass nichts gesendet wird. Ich habe versucht, async zu false hinzuzufügen, weil ich die onbeforeunload Funktion verwende, aber das funktioniert nicht. Ich habe unzählige Kombinationen mit AJAX-Einstellungen ausprobiert, aber nichts funktioniert.Senden von JSON über AJAX nicht möglich

HTML/JS

(function(){ 
var time,timeSite,endTime,seconds,testObject,retrievedObject,text; 
window.onload=function(){ 
    time= new Date();  
} 
window.onbeforeunload=function(){ 
    endTime = new Date(); 
    timeSite= time.getTime()-endTime.getTime(); 
    seconds =Math.abs(timeSite/1000); 
    window.localStorage['seconds']=seconds; 
    text = 'Visitor accessed site directly.'; 
    if(document.referrer == ''){ 
     var link = text; 
    } else{ 
     var link = document.referrer; 
    } 
    var url = window.location.href; 
    var main = { 
     'From': link, 
     'Current was' : url, 
     'Time Spent': seconds 
    } 
    $.ajax({ 
      type: "POST", 
      data: {'data': main}, 
      url: "http://localhost:8080/projectFour/test.php", //i use this page only to check if i receive data 
      contentType:'application/json', 
      success: function(data) { 
       alert(data); 
      }, 
      error: function(xhr, ajaxOptions, thrownError) { 
     if (xhr.status == 200) { 

      alert(ajaxOptions); 
     } 
     else { 
      alert(xhr.status); 
      alert(thrownError); 
     } 
    } 
     }); 
} 
})(); 

test.php

<?php 
    if(isset($_POST['main'])) { 
    $obj = json_decode($_POST['main']); 
    //some php operation 
    echo $obj; 
    } 
?> 
+1

müssen Sie das Objekt selbst string – charlietfl

+0

Ich habe schon versucht, das funktioniert nicht ... –

+0

der Kommentar neben der URL ... ist verwirrend .. vielleicht ist Ihr Verständnis der URL Prop ist falsch. – Seabizkit

Antwort

1

Ihre test.php sucht eine POST-Variable namens main, aber Sie senden ein data genannt.

Sie können den Datenteil des von Ajax-Aufruf ändern:

data: {'data': main} 

zu

data: {'main': main} 

und verursachen sollte die Variable mit main als Variablennamen zu veröffentlichen.

Zweitens, wenn Sie die Daten zurückgeben, wäre es besser, es als JSON wieder zurückzugeben, sonst könnte es das Ergebnis ein wenig verfälschen.

ersetzen

echo $obj; 

mit

echo json_encode($obj); 

Und in der Ajax

ersetzen
alert(data); 

mit

alert(JSON.stringify(data)); 

Dadurch erhalten Sie eine Ansicht der zurückgegebenen Datenstruktur als Zeichenfolge.

Sie sollten auch etwas aus PHP zurückgeben, wenn die if-Anweisung falsch ist, ob das ein Fehlercode oder eine andere Antwort ist. Senden keine Antwort in diesem Fall ist nicht sehr hilfreich für die Client-Seite und hat Ihr Debugging behindert.