Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法通过AJAX发送JSON_Javascript_Jquery_Json_Ajax - Fatal编程技术网

Javascript 无法通过AJAX发送JSON

Javascript 无法通过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

我做了一个函数来计算我花在某个页面上的时间以及我来自哪里。我收集所有数据并将其保存到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; 
   } 
?>

您的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));