【发布时间】:2018-01-08 10:06:00
【问题描述】:
我从几个小时以来就没有继续前进,我非常沮丧,因为我找不到我的错和/或对我的失败的误解:
我想调用 json 数据的后端 - 通过以下源代码:
function dosomething(type)
{
$.post( "dosomethingontheserver", {type}, function( myjson ) {
// do something usefull with myjson data
}, 'json' )
.done(function() {
// just ignore
})
.fail( function(xhr, textStatus, errorThrown) {
console.log(xhr.statusText);
console.log(textStatus);
console.log(errorThrown);
console.log("type "+type);
})
.always(function() {
// alert( "finished for type="+type );
}); }
如果此代码是通过以下方式调用的:
dosomething(0);
一切都好。但如果我这样称呼它两次:
dosomething(0);
dosomething(1);
我在控制台上得到以下信息:
SyntaxError:JSON.parse:第 1 行第 1 列的数据意外结束 JSON数据 堆栈跟踪: jQuery.parseJSON@code.jquery.com/jquery-1.12.4.js:9011:10 ajaxConvert@code.jquery.com/jquery-1.12.4.js:9335:19 done@de.jquery.com/jquery-1.12.4.js:9789:15 callback@code.jquery.com/jquery-1.12.4.js:10311:8
似乎(第一个)请求被第二个调用取消了,响应不再(不再)是 json 格式。服务器总是返回一个 json 格式 - 所以服务器端没有错误。如果我花一些额外的时间,就不会发生这种情况——比如在 dosomething() 函数中的 "alert('hello'); 。
任何想法/提示为什么秒。通话会中断第一个(正在进行的)通话吗?
【问题讨论】:
-
可能服务器无法处理多个调用并抛出错误?您是否尝试过记录以确认服务器正在返回两个调用的 json 数据?
-
好点。我会检查这个....
-
服务器可以处理多个请求。后端是在 Eclipse 环境中执行的 sevlet(在 tomcat 8 中)。我在其中放了一些调试行 - 两个请求都被接收并且两个响应都被传输。两个响应都已替换为静态字符串 - 因此两个响应相等。
-
搞笑:我为第一个来电添加了 Thead.sleep (type==0) - 客户端确实收到了秒。作为第一个请求尽快回答 - 但错误保持不变。
-
检查开发控制台中发布请求的响应(chrome 中的网络选项卡)。它可能有一些帮助。
标签: jquery json ajax post tomcat8