同一个Ajax调用了两次..JQuery
我在JQuery中有一个问题。我在我的代码同一个Ajax调用了两次..JQuery,jquery,ajax,Jquery,Ajax,我在JQuery中有一个问题。我在我的代码(函数1)中使用$.ajax(),将字段名和序列号发送给ctrller,ctrller通过$\u POST['name']和$\u POST['sequenceno']获取数据并使用给定的序列号更新表中的字段名,并使用插入的字段生成预览显示面板。。 现在我正在尝试再次更改字段名称。当我单击生成的显示面板字段时,相应的设置将打开,我将尝试立即更改字段名称(功能2) Function1和Function2都是相同的。在Function1中,我发送字段名和序列
(函数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”)。更改(函数(){});相同但不同的目的嗨,在第二次更改之前,我在代码中使用了解除绑定功能…现在当我使用第二次更改时,它起作用了…但是如果我尝试更改/使用第一次更改,那么我的第一次更改之后的第二次更改也会被调用…但是我只需要调用我的第一次更改…实际上我的第一次更改功能是最初创建字段..我的第二个更改是编辑已生成字段的设置..我现在尝试的是..编辑任何字段的字段设置后..我可以创建一个新字段(即我现在可以创建一个新字段)…听起来您应该做的是将更改处理程序设置为单个函数,并在该函数中根据条件决定要执行的操作。这样,您就不必解除任何绑定。