当使用$ .post()作为网址时,返回给.done的数据已更改

时间:2019-02-07 23:51:46

标签: jquery json ajax

我正在使用$ .post()从服务器获取ajax数据。

$.post({
   type: 'POST',
   url: 'http://<ip-address>/app/path/example.htm',
   data: {<proper data getting sent>},
   dataType: 'json',
   encode: true
   })
.done(function(data){
    console.log(data);
     ---- Do Stuff ----
})

现在在Chrome的检查器中,我可以看到从example.htm返回的json。每个记录中都有一个值为0的值。有60条记录被返回,并且1条记录的过期时间为:1,所有其他记录的过期时间为:0。当我检查控制台以查看日志转储时,每条记录的过期时间都为1记录中的每个其他值都保持不变,但是在服务器发送0和显示1的.done()console.log之间,过期已从0变为1。

为什么将其更改为1,应该保持为0?有什么我想念的吗?

[编辑] 1.填充部分正在处理数据对象,对数据对象没有影响。

  1. $。post中给出的网址上的服务器端代码返回一个序列化的JSON结构,看起来像这样

    {“列表”:[ {“ ID”:26,“ CREATEDON”:“ 2018-12-31 13:22:34.233 -06:00”,“ FIRST_NAME”:“ shawn”,“ LAST_NAME”:“ Smith”,“ OVERDUE”:1, “ UTCDATETIME”:“ 2019年2月7日23:32:39”}, {“ ID”:27,“ CREATEDON”:“ 2018-12-31 13:22:58.810 -06:00”,“ FIRST_NAME”:“ john”,“ LAST_NAME”:“ Jones”,“ OVERDUE”:0, “ UTCDATETIME”:“ 2019年2月7日23:32:39”}, {“ ID”:28,“ CREATEDON”:“ 2018-12-31 13:43:04.793 -06:00”,“ FIRST_NAME”:“ paul”,“ LAST_NAME”:“ Doe”,“ OVERDUE”:0, “ UTCDATETIME”:“ 2019年2月7日23:32:39”}, {“ ID”:59,“ CREATEDON”:“ 2019-01-05 11:36:17.887 -06:00”,“ FIRST_NAME”:“ David”,“ LAST_NAME”:“ Smith”,“ OVERDUE”:0, “ UTCDATETIME”:“ 2019年2月7日23:32:39”}, {“ ID”:60,“ CREATEDON”:“ 2019-01-05 11:37:52.873 -06:00”,“ FIRST_NAME”:“ fred”,“ LAST_NAME”:“ Jones”,“ OVERDUE”:0, “ UTCDATETIME”:“ 2019年2月7日23:32:39”}, {“ ID”:65,“ CREATEDON”:“ 2019-01-05 11:50:26.360 -06:00”,“ FIRST_NAME”:“ harry”,“ LAST_NAME”:“ Doe”,“ OVERDUE”:0, “ UTCDATETIME”:“ 2019年2月7日23:32:39”}, {“ ID”:66,“ CREATEDON”:“ 2019-01-07 09:26:22.617 -06:00”,“ FIRST_NAME”:“ rick”,“ LAST_NAME”:“ James”,“ OVERDUE”:0, “ UTCDATETIME”:“ 2019年2月7日23:32:39”}, {“ ID”:70,“ CREATEDON”:“ 2019-01-10 09:15:51.707 -06:00”,“ FIRST_NAME”:“ Jane”,“ LAST_NAME”:“ Smith”,“ OVERDUE”:0, “ UTCDATETIME”:“ 2019年2月7日23:32:39”}, {“ ID”:71,“ CREATEDON”:“ 2019-01-10 09:18:39.630 -06:00”,“ FIRST_NAME”:“ Jill”,“ LAST_NAME”:“ Smith”,“ OVERDUE”:0, “ UTCDATETIME”:“ 2019年2月7日23:32:39”}, {“ ID”:72,“ CREATEDON”:“ 2019-01-10 09:26:01.330 -06:00”,“ FIRST_NAME”:“ Betty”,“ LAST_NAME”:“ White”,“ OVERDUE”:0, “ UTCDATETIME”:“ 2019年2月7日23:32:39”}, {“ ID”:73,“ CREATEDON”:“ 2019-01-10 09:28:16.757 -06:00”,“ FIRST_NAME”:“ Sue”,“ LAST_NAME”:“ white”,“ OVERDUE”:0, “ UTCDATETIME”:“ 2019年2月7日23:32:39”}, {“ ID”:74,“ CREATEDON”:“ 2019-01-10 09:28:35.617 -06:00”,“ FIRST_NAME”:“ Sally”,“ LAST_NAME”:“ blue”,“ OVERDUE”:0, “ UTCDATETIME”:“ 2019年2月7日23:32:39”}, {“ ID”:75,“ CREATEDON”:“ 2019-01-10 09:43:06.843 -06:00”,“ FIRST_NAME”:“ Megan”,“ LAST_NAME”:“ smith”,“ OVERDUE”:0, “ UTCDATETIME”:“ 2019年2月7日23:32:39”}, {“ ID”:76,“ CREATEDON”:“ 2019-01-10 09:51:21.650 -06:00”,“ FIRST_NAME”:“ Lillian”,“ LAST_NAME”:“ test”,“ OVERDUE”:0, “ UTCDATETIME”:“二月07 2019 23:32:39”}],“错误”:{}}

您可以看到只有1条记录具有OVERDUE:1现在,console.log(data)应该转储该数据,但是沿着这行的某个位置,所有记录都变为1。如在控制台日志转储中所示。

leadslist: Array(61)
0:
CREATEDON: "2018-12-31 13:22:34.233 -06:00"
FIRST_NAME: "shawn"
LAST_NAME: "Smith"
ID: 26
OVERDUE: 1
UTCDATETIME: "February, 07 2019 23:32:39"
__proto__: Object
1:
CREATEDON: "2018-12-31 13:22:58.810 -06:00"
FIRST_NAME: "john"
LAST_NAME: "Jones"
ID: 27
OVERDUE: 1
UTCDATETIME: "February, 07 2019 23:32:39"
__proto__: Object
2:
CREATEDON: "2018-12-31 13:43:04.793 -06:00"
FIRST_NAME: "paul"
LAST_NAME: "Doe"
ID: 28
OVERDUE: 1
UTCDATETIME: "February, 07 2019 23:32:39"
__proto__: Object
3:
CREATEDON: "2019-01-05 11:36:17.887 -06:00"
FIRST_NAME: "David"
LAST_NAME: "Smith"
ID: 59
OVERDUE: 1
UTCDATETIME: "February, 07 2019 23:32:39"
__proto__: Object

我的问题是为什么0没有被执行,我可能没有正确地问这个问题,但这对我来说根本没有任何意义。每个值都被传递,但OVERDUE中的零不是。 “执行资料”部分将获取此数据并构建一个显示在屏幕上的表,该数据不会进行进一步处理。但是除此之外,我的代码设置完全如上所示。如果在do资料中进行了处理,则不会在console.log中显示。这是javascript,它在控制台转储后无法进行处理,并显示在转储中。

2 个答案:

答案 0 :(得分:2)

在进一步调查中,我发现在console.log之后发生的if语句是错误的。我错过了第二个等号,因此它正在设置值。这很奇怪,因为它是在转储到控制台后发生的,所以我一直在寻找为什么控制台会显示在调用并找到控制台后所做的更改。 https://stackoverflow.com/a/24176638/11031165

chrome中有一个非常老的错误,导致我的问题看起来像是在与实际情况不同的地方引起的。

答案 1 :(得分:0)

这似乎是一个后端/ api问题(不是前端),与.done()无关。处理POST请求的服务器可能会更新该值。如果可以访问它,请签出处理该端点请求的服务器代码,并尝试找出为什么更改该值的原因。