繁体   English   中英

无法通过 AJAX 发送 JSON

[英]Unable to send JSON via 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);
        }
    }
       });
}
})();

测试文件

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

您的 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 返回一些内容,无论是错误代码还是其他响应。 在这种情况下不发送响应对客户端不是很有帮助,并且会妨碍您的调试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM