Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.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
Java Ajax将数据附加到以前的数据中?_Java_Jquery_Ajax_Gson - Fatal编程技术网

Java Ajax将数据附加到以前的数据中?

Java Ajax将数据附加到以前的数据中?,java,jquery,ajax,gson,Java,Jquery,Ajax,Gson,index.jsp <input type="text" onfocusout="show(this.value)" /> <div id="output"></div> <script type="text/javascript"> function show(cat) { var output = document.getElementById("output"); $.ajax({

index.jsp

<input type="text" onfocusout="show(this.value)" />
<div id="output"></div>   
<script type="text/javascript">

   function show(cat)
   {
       var output = document.getElementById("output");

       $.ajax({
           type:"get",
           url:"fetchdata",
           data:"cat="+cat,
           success:function(responseJson){
               output.innerHTML = responseJson;
           } 
       });   
   }
}


上面的代码工作正常,但当发出多个ajax请求时,数据会附加到我从上一个ajax请求收到的数据中。我只想用新数据更新
div
,还想知道如何发送多个对象作为响应,并操纵它们从中提取值。

Servlet是多线程的,这意味着Servlet容器将实例化少量实例,但运行多个线程(每个请求一个)通过每个实例。因此,在Servlet类上定义为实例属性的属性将在通过该实例执行的所有线程(请求)之间共享状态

如果实例化一个类(对其调用new),则该类中的所有方法都可以看到实例属性,它们的值是共享的。对于Servlet,Servlet容器至少创建一个Servlet实例,然后出于性能原因,通过该Servlet实例对每个传入请求执行一个线程。这意味着每个执行线程都能够看到实例属性中的值。在方法范围内移动属性意味着每个线程都有自己的副本

将所有属性的声明从实例级别移动到doGet()方法中,那么状态将不再共享。以这种方式在Servlet上共享状态通常是不好的做法

此行为在这里的EE教程中进行了解释-参见17.3.2:

另外,与其创建自己的JDBC连接,最好的做法是在servlet容器上定义一个数据源(如何定义取决于您正在运行的内容),并让应用服务器为您管理连接。您只需在需要时从数据源拉取连接

要回答问题的第二部分,您可以这样构造json,以便在响应中包含多个属性:

{
    "pname" : "pname value",
    "iname" : "iname value"
    //etc
}

如果这些属性本身有属性、嵌套对象,那么只需创建另一个Json对象作为其中一个属性的值。

。您将json响应视为html,当您执行
output.innerHTML=responseJson没有附加,前面的html是replaced@charlietfl是的,它必须取代以前的html,但我不知道为什么它不这样做。创建一个演示,复制这个。此外,
show()
中的
cat
甚至没有定义。您确定浏览器控制台中没有出现错误吗?显示的代码应该失败。我如何创建演示?抱歉,这只是一个输入错误。我已经更新了它。谢谢。但是你能再解释一下为什么部分。如果你能在问题的第二部分给我一些启发,并添加一些更详细的信息,那会很有帮助。让我知道这是否有帮助?谢谢。您还可以告诉我如何发送多个对象作为响应,因为我还想向ajax调用发送
iname
cname
price
{
    "pname" : "pname value",
    "iname" : "iname value"
    //etc
}