同样的Ajax调用了两次..JQuery

时间:2009-06-04 11:49:51

标签: jquery ajax

我在JQuery中有一个问题..我在我的代码$.ajax()中使用(Function 1)将字段名和序列号发送到ctrller,后者通过$_POST['name']获取数据{ {1}}并更新表中的字段名,序列号为no..And生成带有插入字段的预览显示面板。 现在我正在尝试再次更改字段名称现在当我点击生成的显示面板字段时,相应的设置将打开,我将尝试更改字段的名称$_POST['sequenceno']

(Function 2)Function1都相同..在Function2我发送的字段名称和序列号

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

但是在Function1中(sequenceno是计数器值) 而在Function2中(sequenceno是点击的div id(显示面板))

我怎样才能为两者使用相同的函数..或者我可以使用单独的函数..

即使我尝试使用不同网址的2个独立功能但未正确更新

我的代码是

Function1

现在     当我单击DisplayPanel视图

    //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

但是现在如果我再次尝试更改字段名称,我正在编写另一个POST函数 $("#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 ,但执行内部editsettings(最初更改)而不是Func1(更改为fieldname再次)... 请有人为此得出答案.... 注意: Func2在我的prg中使用了两次。可能是因为这个更新出错了

4 个答案:

答案 0 :(得分:8)

问题似乎是你的两个事件处理程序都在触发,你只想要触发后者。

jQuery .change()函数将事件处理程序添加到change事件中。它不会取代现有的。如果要删除以前的处理程序,则需要以下内容:

$(".TextFieldSettings #fieldTitle").unbind('change') 

在附加新处理程序之前。

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

答案 1 :(得分:5)

您确定两次不包含相同的脚本吗?例如:

Viewstart:

Scripts/jquery-1.6.1.js

部分观点:

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

我遇到了同样的问题,我通过删除min-version解决了这个问题。

我希望这会有所帮助。

答案 2 :(得分:2)

我有另一个案子。绑定点击按钮后,我得到两次发送ajax。它由于我有两个同名的id,所以触发器检测到两次。

答案 3 :(得分:0)

我正在开发一个使用亚马逊网络服务EC2的项目。我正在上传一个大文件(最大150 MB)。在前端使用Ajax。并在后端弹出MVC。 我的问题是Spring控制器“uploadFile()”方法调用了两次。我在我的javascript中设置了一个断点,javacript方法没有调用两次。这仅发生在AWS实例上,而不是发生在我的本地。并且在uploadFile()方法调用之间大约90秒。 然后ajax回调得到错误。 Statuscode = 0,错误=“” Firefox Firebug说“流产” Chrome inspect给了我“net :: ERR_EMPTY_RESPONSE”

我虽然可能是ajax两次调用后端的地方。

我在stackoverflow上搜索了很多解决方案。像
1. /添加e.preventDefault()和e.stopImmediatePropagation(); 2 ./或更改tomcat / confg / server.xml中的maxSwallowSize 3. $(“#uploadFileForm”)。unbind('submit')。submit(function(e) 4.将async更改为true并将超时值添加到ajax方法             类型:'POST',             超时:60000,             async:true,

以上都不是。

最后,我通过将ELB中的空闲超时更改为600秒来解决它。我的控制器没有调用两次。

http://docs.aws.amazon.com/elasticloadbalancing/latest/classic/config-idle-timeout.html https://aws.amazon.com/blogs/aws/elb-idle-timeout-control/

首先,我要感谢所有回答stackoverflow问题的人,这对很多很多很多很有帮助。 解决方案没有错,只是不是我的情况。这个问题花了我3天时间。我希望它可以帮助你提问。 “ajax fire / call two”“Spring控制器调用两次”“Ajax超时”