无法通过AJAX发送JSON

时间:2017-01-10 11:28:14

标签: javascript jquery json ajax

我制作了一个函数来计算我在某个页面上花了多少时间以及我来自哪里。我收集所有数据并将其保存为JSON但是当我尝试通过ajax发送该JSON成功时,它会通过空警报框提醒我,这意味着没有任何内容被发送。我试图将async添加到false,因为我使用了 onbeforeunload 函数,但这并不起作用。我尝试了无数组合与AJAX设置,但没有任何工作。

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 个答案:

答案 0 :(得分:1)

您的test.php正在寻找名为main的POST变量,但您要发送一个名为data的变量。

您可以从以下位置更改ajax调用的数据部分:

data: {'data': main}

data: {'main': main}

这应该使它以main作为变量名称发布变量。

其次,当您返回数据时,最好再次将其作为JSON返回,否则可能会导致结果错误。

替换

echo $obj;

echo json_encode($obj);

在ajax替换

alert(data);

alert(JSON.stringify(data));

这将为您提供返回的数据结构视图。

if语句为false时,您还应该考虑从PHP返回一些内容,无论是错误代码还是其他响应。在这种情况下不发送任何响应对客户端没有任何帮助,并阻碍了您的调试。