Javascript 无法通过AJAX发送JSON
我做了一个函数来计算我花在某个页面上的时间以及我来自哪里。我收集所有数据并将其保存到JSON中,但当我尝试在成功时通过ajax发送JSON时,它会用一个空的警报框提醒我,这意味着没有发送任何内容。我尝试将async添加到false,因为我使用了onbeforeunload函数,但这不起作用。我尝试了无数种与AJAX设置的组合,但没有任何效果 HTML/JSJavascript 无法通过AJAX发送JSON,javascript,jquery,json,ajax,Javascript,Jquery,Json,Ajax,我做了一个函数来计算我花在某个页面上的时间以及我来自哪里。我收集所有数据并将其保存到JSON中,但当我尝试在成功时通过ajax发送JSON时,它会用一个空的警报框提醒我,这意味着没有发送任何内容。我尝试将async添加到false,因为我使用了onbeforeunload函数,但这不起作用。我尝试了无数种与AJAX设置的组合,但没有任何效果 HTML/JS (function(){ var time,timeSite,endTime,seconds,testObject,retrievedObj
(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;
}
?>
您的test.php正在查找名为
main
的POST变量,但您正在发送名为data
的POST变量
您可以从以下位置更改ajax调用的数据部分:
data: {'data': main}
到
这将导致它以main
作为变量名发布变量
其次,当您返回数据时,最好再次将其作为JSON返回,否则可能会破坏结果
替换
echo $obj;
与
在ajax中
alert(data);
与
这将为您提供作为字符串返回的数据结构的视图
你也应该考虑在PHP中返回一些东西,当<代码>如果语句是错误的,这是否是一个错误代码,或者其他一些响应。在这种情况下,不发送响应对客户端没有多大帮助,并且妨碍了您的调试。
需要对您自己尝试过的对象进行字符串化,这不起作用……url旁边的注释……令人困惑。。也许你对url属性的理解是不正确的。请放在一旁:如果(xhr.status==200){alert(ajaxOptions);}
在错误块中永远不会执行。仅当状态为!=200(即状态不是“OK”,即错误)。当HTTP状态为200时,将执行“success”函数。无论如何,在“success”函数中使用空框发出警报并不能证明未发送任何内容,除非test.php
只是编程为直接返回已发布的内容而不进行更改。test.php
的代码是什么样子的?
echo json_encode($obj);
alert(data);
alert(JSON.stringify(data));