同一个Ajax调用了两次..JQuery

同一个Ajax调用了两次..JQuery,jquery,ajax,Jquery,Ajax,我在JQuery中有一个问题。我在我的代码(函数1)中使用$.ajax(),将字段名和序列号发送给ctrller,ctrller通过$\u POST['name']和$\u POST['sequenceno']获取数据并使用给定的序列号更新表中的字段名,并使用插入的字段生成预览显示面板。。 现在我正在尝试再次更改字段名称。当我单击生成的显示面板字段时,相应的设置将打开,我将尝试立即更改字段名称(功能2) Function1和Function2都是相同的。在Function1中,我发送字段名和序列

我在JQuery中有一个问题。我在我的代码
(函数1)
中使用
$.ajax()
,将字段名和序列号发送给ctrller,ctrller通过
$\u POST['name']
$\u POST['sequenceno']获取数据
并使用给定的序列号更新表中的字段名,并使用插入的字段生成预览显示面板。。 现在我正在尝试再次更改字段名称。当我单击生成的显示面板字段时,相应的设置将打开,我将尝试立即更改字段名称
(功能2)

Function1
Function2
都是相同的。在
Function1
中,我发送字段名和序列号

在函数2中,我想发送相同的字段名和(但另一个值)sequenceno

但在函数1中(sequenceno是计数器值) 而在函数2中(sequenceno是单击的div id(显示面板))

如何对两个..使用相同的函数,或者需要使用单独的函数

甚至我也尝试使用两个不同URL的函数,但没有正确更新

我的代码是

    //This is what i insert the field initially

              $(".TextFieldSettings #fieldTitle").change(function (){
             fieldname=$(".TextFieldSettings #fieldTitle").val();
    $.ajax({
           type: "POST",
           url: "./server",
        data: "name="+fieldname+"&sequenceno="+counter,

                success: function(msg){
                      }//success
           });//ajax

     });//change

//After inserting to get the updated values in JSON format

     var htm = $.ajax({
       type: "GET",
          url: "./viewforms",
         async: false
       }).responseText;
        var myObject = eval('(' + htm + ')');


    gettype=myObject.attributes[0]["type"];
   getlabel=myObject.attributes[0]["labels"];

    //showing in my DisplayPanel view

            $("#labelstr"+counter+"").html(getlabel);
     });//change
现在 当我单击DisplayPanel视图时

      $("#displayPanel div").live("click", function(){
                             div_id=$(this).attr("id");

                                var htm = $.ajax({
                                  type: "GET",
                                  url: "./getattributes/"+div_id+"",
                                  async: false
                                 }).responseText;
                                var myObject = eval('(' + htm + ')');


                                gettype=myObject.attributes[0]["type"];
                                getlabel=myObject.attributes[0]["labels"];
                                getsize=myObject.attributes[0]["size"];

    if(gettype=='Text')
     {
    $(".TextFieldSettings").show(function(){
    $(".TextFieldSettings #fieldTitle").val(getlabel);//showing the updated value
                             if(getsize=='100')
                           {
             $("#fieldSize option:contains(Small)").attr("selected",true);
                           }
                             else if(getsize=='200')
                            {
        $("#fieldSize option:contains(Medium)").attr("selected",true);
                         }
              else 
            {
          $("#fieldSize option:contains(Large)").attr("selected",true);
            }
//Again i m changing the fieldname


       $(".TextFieldSettings #fieldTitle").change(function (){
      fieldname=$(".TextFieldSettings #fieldTitle").val();


                                alert(div_id);
                                        $.ajax({
                                           type: "POST",
                                           url: "./editsettings",



                                                                         data: "name="+fieldname+"&sequenceno="+div_id,
                                           success: function(msg){

                                            }//success
                                           });//ajax


});//change in text value later*/



                    });//show
                    }//if type = TEXT

                });//displaypanel Div clicked
但是现在如果我再次尝试更改字段名,我正在编写另一个POST函数
editsettings
,但是执行在
Func1
(最初更改)中,而不是
Func2
(再次更改字段名)。。。 请任何人说出这个问题的答案。。。。 注:
$(“.TextFieldSettings#fieldTitle”).change()
在我的prg中使用了两次。可能是因为这个原因,更新出错了。问题似乎是两个事件处理程序都在启动,而您只想启动后一个

函数的作用是:将事件处理程序添加到变更事件中。它不会取代现有的。如果要删除上一个处理程序,则需要以下内容:

$(".TextFieldSettings #fieldTitle").unbind('change') 
在附加新处理程序之前


请注意,我不确定这是否有效(我刚从api文档中找到),现在无法测试它。但是,一般的想法是,如果希望事件处理程序停止响应事件,则必须删除该处理程序。

您确定没有两次包含同一脚本吗?例如:

视图开始:

Scripts/jquery-1.6.1.js
局部视图:

<script src="@Url.Content("~/Scripts/jquery-1.6.1.min.js")" type="text/javascript"></script>

我也遇到了同样的问题,我通过删除min版本解决了这个问题


我希望这会有帮助。

我还有一个案子。当我点击一个按钮时,我收到了两次发送贴子ajax。这是因为我有两个同名的id,所以触发器检测到两次。

我正在处理一个使用Amazon web service EC2的项目。我正在上传一个大文件(高达150MB)。在前端使用Ajax。和后端的spring MVC。 我的问题是Spring控制器“uploadFile()”方法调用了两次。我在javascript中设置了一个断点,javascript方法不会被调用两次。这只发生在AWS实例上,而不是我的本地实例上。uploadFile()方法调用之间的间隔约为90秒。 然后,ajax回调函数会出现错误。Statuscode=0,error=“” Firefox Firebug称“中止” Chrome inspect给我“net::ERR\u EMPTY\u RESPONSE”

我想ajax可能会调用后端两次

我在stackoverflow上搜索了许多解决方案。像
1. /添加e.preventDefault()和e.stopImmediatePropagation(); 2./或者在tomcat/confg/server.xml中更改MaxShungSize 3. $(“#uploadFileForm”).unbind('submit').submit(函数(e) 4.将async更改为true,并向ajax方法添加超时值 键入:“POST”, 超时:60000, async:true

以上工作都没有

最后,我通过将ELB中的空闲超时更改为600秒来解决这个问题,并且我的控制器没有调用两次

首先,我要感谢所有回答stackoverflow问题的人,他们帮了我很大的忙。 解决方案没有错,只是不适合我的情况。这个问题花了我3天时间。我希望它能帮助你解决这个问题。
“ajax启动/调用两次”“Spring控制器调用两次”“ajax超时”

这里的问题实际上是哪一部分?你想知道你是否可以只使用一个可重用函数而不是两个不同的函数?两个不同的函数()但两个名称都像$(“.TextFieldSettings#fieldTitle”)。更改(函数(){});相同但不同的目的嗨,在第二次更改之前,我在代码中使用了解除绑定功能…现在当我使用第二次更改时,它起作用了…但是如果我尝试更改/使用第一次更改,那么我的第一次更改之后的第二次更改也会被调用…但是我只需要调用我的第一次更改…实际上我的第一次更改功能是最初创建字段..我的第二个更改是编辑已生成字段的设置..我现在尝试的是..编辑任何字段的字段设置后..我可以创建一个新字段(即我现在可以创建一个新字段)…听起来您应该做的是将更改处理程序设置为单个函数,并在该函数中根据条件决定要执行的操作。这样,您就不必解除任何绑定。