ajax提交一次之后不能再次提交

kele52159 2014-10-17 11:04:04
ajax提交一次之后 再次点击检索的时候 alert("jin ru submit");没有被执行 新手 不理解为什么会这样 请高手解答!!

$("#doSelect").click(function () {
$("#examineeForm").attr("action", "/Sample0203/DoSelect");
$('#examineeForm').submit(function () {
alert("jin ru submit");
if ($(this).valid()) {
var request = new Sample0203Form();
$.ajax({
type: "POST",
url: '@Url.Action("DoSelect", "Sample0203")',
dataType: 'json',
data: JSON.stringify(request),
contentType: 'application/json',
updateTargetId: 'divTab1',
success: function (data) {
alert("success:" + data.StrField1);
}
});
}
return false;
});
alert("jinru ");
$('#examineeForm').submit();
});
...全文
484 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
wrqlgd 2014-10-22
  • 打赏
  • 举报
回复
引用 16 楼 zhr19811013 的回复:
[quote=引用 14 楼 wrqlgd 的回复:] $('#examineeForm').submit(); 是不是这行代码覆盖掉了上面代码内的function,所以没有反应??? 你给这行代码的submit重新写个function,然后alert另外一个内容试试
如果不加这句话 提交不到后台!!按照网上提供的资料return false; 是不会提交到后台的 实际执行时也没有提交到后台 因此$('#examineeForm').submit();是必须的 [/quote] jquery不太熟悉,不过我感觉$('#examineeForm').submit(function(){});这里已经执行了submit了~~~~~
xiaolll028 2014-10-17
  • 打赏
  • 举报
回复
……你的问题表达的就不对 你要做局部刷新是吧?那你这种方式就不对啊。 你action中返回josn或者字符串。 然后ajax中获取到字符串,再对页面的对象操作就好了
kele52159 2014-10-17
  • 打赏
  • 举报
回复
引用 3 楼 xiaolll028 的回复:
缓存了哈,在请求的url后加个随机数吧/Sample0203/DoSelect?a=Math.random()
不是太懂为什么要加?a=Math.random() ??? 自我感觉解决问题的方向不对! view的代码 @model MvcApplication.Models.Sample0203.Sample0203Form @using (Html.BeginForm("Sample0203", "", FormMethod.Post, new { id = "examineeForm" })) { <table width="960" border="0" cellspacing="0" cellpadding="0" class="alltab"> <tr> <td valign="top"> <div class="bbtab" id="search_condition"> <table border="0" cellspacing="5" cellpadding="0"> <tr> <td colspan="2" style="font-weight: bold;">■条件設定</td> </tr> <tr> <td> <label class="label130">店舗コード</label> </td> <td colspan="4"> <input type="text" name="StrField1" id="StrField1" style="width: 100px; height: 24px;" maxlength="4" /> </td> </tr> <tr> <td> <label class="label130">コード範囲</label> </td> <td colspan="4"> <span> <input type="text" name="StrField2" id="StrField2" style="width: 100px; height: 24px;" maxlength="4" />  ~  <input type="text" name="StrField3" id="StrField3" style="width: 100px; height: 24px;" maxlength="4" /> </span> </td> </tr> <tr> <td> <label class="label130">メニュー名称</label> </td> <td colspan="4"> <input type="text" name="StrField4" id="StrField4" style="width: 300px; height: 20px;" maxlength="40" /> </td> </tr> <tr> <td> <label class="label130">売価範囲</label> </td> <td style="width: 494px"> <span> <input type="text" name="StrField5" id="StrField5" style="width: 100px; height: 20px;" maxlength="7" />  ~  <input type="text" name="StrField6" id="StrField6" style="width: 100px; height: 20px;" maxlength="7" /> </span> </td> <td> <span> <input class="btn130" value="条件クリア" onclick="doClear()" /> <input class="btn130" value="検  索" id="doSelect" /> </span> </td> </tr> </table> </div> </td> </tr> <tr> <td colspan="2" align="left" valign="top"> <div class="bbtab" id="tableArea"> <table width="100%" border="0" cellspacing="5" cellpadding="0"> <tr> <td style="font-weight: bold;">■検索結果</td> </tr> <tr> <td colspan="3"> <table width="930" border="0" cellspacing="0" cellpadding="0" class="l_table"> <tr style="background: url(Images/tit23.gif) repeat-x;" align="center"> <td width="80">コ一ド</td> <td>メニュー名称</td> <td>売価</td> <td>点数</td> <td>金額</td> </tr> @if (Model.Commodity.Count > 0) { for (int i = 0; i < Model.Commodity.Count; i++) { if ((i % 2) == 0) { <tr style="background: #dfecfa;"> <td>@Html.DisplayFor(item => Model.Commodity[i].Code)</td> <td>@Html.DisplayFor(item => Model.Commodity[i].Name)</td> <td>@Html.DisplayFor(item => Model.Commodity[i].Price)</td> <td>@Html.DisplayFor(item => Model.Commodity[i].Point)</td> <td>@Html.DisplayFor(item => Model.Commodity[i].Amount)</td> </tr> } else { <tr style="background: #fff;"> <td>@Html.DisplayFor(item => Model.Commodity[i].Code)</td> <td>@Html.DisplayFor(item => Model.Commodity[i].Name)</td> <td>@Html.DisplayFor(item => Model.Commodity[i].Price)</td> <td>@Html.DisplayFor(item => Model.Commodity[i].Point)</td> <td>@Html.DisplayFor(item => Model.Commodity[i].AmountDisPlay)</td> </tr> } } } </table> </td> </tr> <tr> <td> <input class="btn130" value="全 選 択" /> </td> <td> <input class="btn130" value="選択解除" /> </td> <td> <span style="padding-left: 283px"> <label>小計</label> @*<input type="text" name="textfield7" id="textfield7" value='model.StrField7' style="width: 150px; height: 24px;" />*@ @Html.TextBoxFor(model => model.StrField7, new { style = "width:150px;height: 24px;" }) @*<input type="text" name="textfield8" id="textfield8" style="width: 181px; height: 24px;" />*@ @Html.TextBoxFor(model => model.StrField8, new { style = "width:150px;height: 24px;" }) </span> </td> </tr> </table> </div> </td> </tr> </table> } Controllers的代码 [HttpPost] public ActionResult DoSelect(Sample0203Form sample0203From) { bool isAjax = Request.IsAjaxRequest(); //Sample0203Form sample0203From = new Sample0203Form(); sample0203From.Commodity = new List<CommodityModel>(); CreateCommodityModelList(sample0203From.Commodity); long pointSum = 0; long amountSum = 0; foreach (CommodityModel item in sample0203From.Commodity) { pointSum += Convert.ToInt32(item.Point); amountSum += Convert.ToInt32(item.Amount); } sample0203From.StrField7 = Convert.ToString(pointSum); sample0203From.StrField8 = amountSum.ToString("#,###"); return View("Sample0203", sample0203From); //return Json(sample0203From, JsonRequestBehavior.AllowGet); } 虽然使用ajax来提交 但是表单中的数据是sample0203From.Commodity来显示 不知道这种做法对不对 我的本意是当输入检索条件后 点击检索 条件能保留下来(所以使用ajax提交)同时表单中的数据表示出来(但是实际执行的时候感觉页面全部刷新了 输入检索条件也没有保留下来) 求高手解惑!!
xiaolll028 2014-10-17
  • 打赏
  • 举报
回复
缓存了哈,在请求的url后加个随机数吧/Sample0203/DoSelect?a=Math.random()
kele52159 2014-10-17
  • 打赏
  • 举报
回复
引用 1 楼 qwertxp 的回复:
$.ajax中添加cache:false以防止缓存请求。
貌似没有起到作用呀!! 感觉解决问题的方向不对!
qwertxp 2014-10-17
  • 打赏
  • 举报
回复
$.ajax中添加cache:false以防止缓存请求。
kele52159 2014-10-17
  • 打赏
  • 举报
回复
引用 14 楼 wrqlgd 的回复:
$('#examineeForm').submit(); 是不是这行代码覆盖掉了上面代码内的function,所以没有反应??? 你给这行代码的submit重新写个function,然后alert另外一个内容试试
如果不加这句话 提交不到后台!!按照网上提供的资料return false; 是不会提交到后台的 实际执行时也没有提交到后台 因此$('#examineeForm').submit();是必须的
kele52159 2014-10-17
  • 打赏
  • 举报
回复
引用 12 楼 stormem 的回复:
你看看 你的提交按钮 是不是 submit
提交按钮 不是 submit
wrqlgd 2014-10-17
  • 打赏
  • 举报
回复
$('#examineeForm').submit(); 是不是这行代码覆盖掉了上面代码内的function,所以没有反应??? 你给这行代码的submit重新写个function,然后alert另外一个内容试试
stormem 2014-10-17
  • 打赏
  • 举报
回复
引用 8 楼 sp1234 的回复:
[quote=引用 6 楼 zhr19811013 的回复:] [quote=引用 5 楼 xiaolll028 的回复:] ……你的问题表达的就不对 你要做局部刷新是吧?那你这种方式就不对啊。 你action中返回josn或者字符串。 然后ajax中获取到字符串,再对页面的对象操作就好了
谢谢高手提供解决意见! 想法的确是想要这样的结果 局部刷新 保留输入的检索条件 感觉应该是这个原因 ! 按照高手提供的意见 下面的这部分html代码就需要用js来写 简单的还以 但是像这样处理类似datagird的处理 感觉 太复杂了 呜呜 不会呀!!! [/quote] 如果你要使用 ajax 来处理 UI 展示刷新,那么你的可见的组件就应该使用基于 javascript 的 Grid 插件。 使用asp.net webform 或者asp.net mvc都是坑爹的,因为它们都是只能支持那种“服务器端一遍遍下载html”的编程方式,不支持 ajax 来渲染 UI 的。 在前端开发方面,你不应该学习asp.net(用它作点 ashx 支持 ajax 数据访问服务即可),而是应该学会使用任何一种基于 js 的 Grid 组件。[/quote] 看过N个帖子了 ,@sp1234 这家一直 说一些高大尚的东西。从来没解决过实际问题,这是在受之以渔?
stormem 2014-10-17
  • 打赏
  • 举报
回复
你看看 你的提交按钮 是不是 submit
kele52159 2014-10-17
  • 打赏
  • 举报
回复
引用 10 楼 sp1234 的回复:
[quote=引用 6 楼 zhr19811013 的回复:] 所以请教高手大侠们 对于处理类似这样画面 提供一个好的解决方法 嘿嘿要是有完整的例子就完美了!!
为什么要学会前端 UI 框架的编程开发,而放弃 asp.net 这类方式呢?拿你这个过于简单的例子来看,假设在下面的 Grid 中需要编辑,编辑过程中需要局部刷新 Grid,那么编辑的状态怎么维持?再比如说 tree 上的节点被点击、状态改变,这时候要刷新 tree,这些状态如何维持?再比如说稍微复杂页面有很多局部刷新的部分,每一部分的 id 等等如何协调?这些都应该从前端编程上统一设计,进行轻量级的 UI 编程。而使用“局部刷新 html”的方式的程序员只会“丢弃”这些 UI 交互设计细节,否则就搞不定了。 所以如果想大量使用 ajax 编程,那么我们就相信首先要求程序员“刷新局部内容时不在 asp.net 端输出 html,仅需要输出数据”。因此 asp.net webform 和 asp.net mvc 的 UI 处理框架都无用。[/quote] 恩 谢谢 !!大侠高手的指点! 结合我提出的问题 总结一下 使用ajax来提交 但是表单中的数据是sample0203From.Commodity来显示 这种做法本身就是错误的 我应该使用 javascript 的 Grid 插件 通过Controllers来返回json数据 进而给 javascript 的 Grid 赋值 我会试着使用第三方Grid控件 来实现我想要的需求 回到 我最初提出的问题 ajax提交一次之后 可以出数据 但是 再次点击检索的时候 alert("jin ru submit");没有被执行 我还是想知道原因 请高手解答!!
  • 打赏
  • 举报
回复
引用 6 楼 zhr19811013 的回复:
所以请教高手大侠们 对于处理类似这样画面 提供一个好的解决方法 嘿嘿要是有完整的例子就完美了!!
为什么要学会前端 UI 框架的编程开发,而放弃 asp.net 这类方式呢?拿你这个过于简单的例子来看,假设在下面的 Grid 中需要编辑,编辑过程中需要局部刷新 Grid,那么编辑的状态怎么维持?再比如说 tree 上的节点被点击、状态改变,这时候要刷新 tree,这些状态如何维持?再比如说稍微复杂页面有很多局部刷新的部分,每一部分的 id 等等如何协调?这些都应该从前端编程上统一设计,进行轻量级的 UI 编程。而使用“局部刷新 html”的方式的程序员只会“丢弃”这些 UI 交互设计细节,否则就搞不定了。 所以如果想大量使用 ajax 编程,那么我们就相信首先要求程序员“刷新局部内容时不在 asp.net 端输出 html,仅需要输出数据”。因此 asp.net webform 和 asp.net mvc 的 UI 处理框架都无用。
  • 打赏
  • 举报
回复
轻量级的 ajax 方法,不是执行 form.submit,所以你的折部分代码应该删除掉。 你可以使用 ajax 方式去下载某个页面的局部的 html,在服务器端定义所谓局部视图或者用户控件用于获取 html。这在你这个没有经过美工设计、异常简单的页面中是可以方便处理的。你可以搜索一下关于局部刷新 html 的文章。 不过我建议你学会一、两种前端 UI 框架中的 Grid,而不是在服务器端生成这种东西。
  • 打赏
  • 举报
回复
引用 6 楼 zhr19811013 的回复:
[quote=引用 5 楼 xiaolll028 的回复:] ……你的问题表达的就不对 你要做局部刷新是吧?那你这种方式就不对啊。 你action中返回josn或者字符串。 然后ajax中获取到字符串,再对页面的对象操作就好了
谢谢高手提供解决意见! 想法的确是想要这样的结果 局部刷新 保留输入的检索条件 感觉应该是这个原因 ! 按照高手提供的意见 下面的这部分html代码就需要用js来写 简单的还以 但是像这样处理类似datagird的处理 感觉 太复杂了 呜呜 不会呀!!! [/quote] 如果你要使用 ajax 来处理 UI 展示刷新,那么你的可见的组件就应该使用基于 javascript 的 Grid 插件。 使用asp.net webform 或者asp.net mvc都是坑爹的,因为它们都是只能支持那种“服务器端一遍遍下载html”的编程方式,不支持 ajax 来渲染 UI 的。 在前端开发方面,你不应该学习asp.net(用它作点 ashx 支持 ajax 数据访问服务即可),而是应该学会使用任何一种基于 js 的 Grid 组件。
xiaolll028 2014-10-17
  • 打赏
  • 举报
回复
把这个换成js操作一样的啊 假如返回的json对象 { Commodity: [ {Code:'1',Name:'0'}, {Code:'6101',Name:'西安市'}, {Code:'6102',Name:'铜川市'}, ] } for (var i = 0; i < results.Commodity.length; i++) { 就是拼接html字符串 } 完了后就是在相应的table后面加个这个节点 @if (Model.Commodity.Count > 0) { for (int i = 0; i < Model.Commodity.Count; i++) { if ((i % 2) == 0) { <tr style="background: #dfecfa;"> <td>@Html.DisplayFor(item => Model.Commodity[i].Code)</td> <td>@Html.DisplayFor(item => Model.Commodity[i].Name)</td> <td>@Html.DisplayFor(item => Model.Commodity[i].Price)</td> <td>@Html.DisplayFor(item => Model.Commodity[i].Point)</td> <td>@Html.DisplayFor(item => Model.Commodity[i].Amount)</td> </tr> } else { <tr style="background: #fff;"> <td>@Html.DisplayFor(item => Model.Commodity[i].Code)</td> <td>@Html.DisplayFor(item => Model.Commodity[i].Name)</td> <td>@Html.DisplayFor(item => Model.Commodity[i].Price)</td> <td>@Html.DisplayFor(item => Model.Commodity[i].Point)</td> <td>@Html.DisplayFor(item => Model.Commodity[i].AmountDisPlay)</td> </tr> } } }
kele52159 2014-10-17
  • 打赏
  • 举报
回复
引用 5 楼 xiaolll028 的回复:
……你的问题表达的就不对

你要做局部刷新是吧?那你这种方式就不对啊。
你action中返回josn或者字符串。
然后ajax中获取到字符串,再对页面的对象操作就好了


谢谢高手提供解决意见!
想法的确是想要这样的结果 局部刷新 保留输入的检索条件
感觉应该是这个原因 !
按照高手提供的意见 下面的这部分html代码就需要用js来写 简单的还以 但是像这样处理类似datagird的处理 感觉 太复杂了 呜呜 不会呀!!!

@if (Model.Commodity.Count > 0)
{
for (int i = 0; i < Model.Commodity.Count; i++)
{
if ((i % 2) == 0)
{
<tr style="background: #dfecfa;">
<td>@Html.DisplayFor(item => Model.Commodity[i].Code)</td>
<td>@Html.DisplayFor(item => Model.Commodity[i].Name)</td>
<td>@Html.DisplayFor(item => Model.Commodity[i].Price)</td>
<td>@Html.DisplayFor(item => Model.Commodity[i].Point)</td>
<td>@Html.DisplayFor(item => Model.Commodity[i].Amount)</td>
</tr>
}
else
{
<tr style="background: #fff;">
<td>@Html.DisplayFor(item => Model.Commodity[i].Code)</td>
<td>@Html.DisplayFor(item => Model.Commodity[i].Name)</td>
<td>@Html.DisplayFor(item => Model.Commodity[i].Price)</td>
<td>@Html.DisplayFor(item => Model.Commodity[i].Point)</td>
<td>@Html.DisplayFor(item => Model.Commodity[i].AmountDisPlay)</td>
</tr>
}
}
}

所以请教高手大侠们 对于处理类似这样画面 提供一个好的解决方法 嘿嘿要是有完整的例子就完美了!!

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧