2017-08-01 64 views
-1

我不继续,因为小时,我很frustated,因为我无法找到我的错,和/或我失败的误解:的Javascript:jQuery的POST请求未正常工作

我想呼吁后端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: unexpected end of data at line 1 column 1 of the JSON data Stack-Trace: [email protected]/jquery-1.12.4.js:9011:10 [email protected]/jquery-1.12.4.js:9335:19 [email protected]/jquery-1.12.4.js:9789:15 [email protected]/jquery-1.12.4.js:10311:8

看来,(第一)请求由呼叫从第二取消和响应不再(再)是json格式。服务器总是返回一个json格式 - 所以服务器端没有错误。如果我在dosomething()函数中花费了一些额外的时间 - 比如alert('hello'),这种情况就不会发生了。

任何想法/提示为什么秒调用会中断第一个(正在进行的)调用?

+0

也许服务器无法处理多个调用并引发错误?您是否尝试过记录以确认服务器是否为这两个调用返回了json数据? – H77

+0

好点。我会检查这.... –

+0

服务器可以处理multipe请求。后端是在eclipse环境中执行的sevlet(在tomcat 8中)。我在它里面放了一些调试行 - 两个请求都被接收到并且两个响应都被传输。两个响应都被一个静态字符串取代 - 所以两个响应都是相同的。 –

回答

-1

尝试指定内容类型和接受型

+0

如何?被调用的servlet会像下面这样设置它:servletResponse.setContentType(“application/json”);并在JavaScript中设置为“'json'” –

+0

如果您要使用的默认值是默认值,则没有理由设置contentType。 –

-1

感谢所有的反应。

我找到了。我真是个白痴。在servlet的OutputStream中的变量声明为“静态”,所以秒呼叫也会修改那个流,导致并发请求的问题。