我创建了一个函数来计算我在某个页面上花费的时间以及我来自哪里。我收集所有数据并将其保存到 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
<?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));
这将为您提供返回的数据结构作为字符串的 View 。
当 if
语句为 false 时,您还应该考虑从 PHP 返回一些内容,无论是错误代码还是其他响应。在这种情况下不发送响应对客户端没有多大帮助,并且会妨碍您的调试。
关于javascript - 无法通过 AJAX 发送 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41567718/