javascript - 无法通过 AJAX 发送 JSON

标签 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);
        }
    }
       });
}
})();

测试.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/

相关文章:

c# - 使用 System.Text.Json 将 JSON 反序列化为包含动态属性的类

javascript - 如果不满足三元运算符中的条件,是否可以写入两个值

javascript - 使用局部变量调用时,protractor .get 不是函数

javascript - Bootstrap容器中的背景色在Electron中不起作用

javascript - 如何模糊div后面的内容?

json - XQuery 3.1 是为高级 JSON 编辑而设计的吗?

javascript - 使用 javascript 单击更改 td 类不起作用

jquery - 使用 ID 的元素偏移量运行 ScrollTop

javascript - iframe 在加载时覆盖我的自定义 css

java - JSONObject.toString : how NOT to escape slashes