为什么不';t Ajax.在Chrome中开始工作

本文关键字:Chrome 开始 工作 Ajax 为什么不 | 更新日期: 2023-09-27 18:24:54

我正在使用c#.NET MVC2,我正在尝试创建一个ajax表单,该表单调用一个删除数据库记录的方法(RemoveRelation)。删除记录的过程正在按预期进行。删除记录后,表单应该调用一个javascript函数,从视觉效果中删除记录(RemoveRelation(10))。这是通过一个AJAX调用完成的,在Internet Explorer 9和Firefox 4上,它都按预期工作,但在Chrome上,由于某种原因,更新没有通过AJAX调用进行,并且当提交删除记录的表单时,整个页面都在刷新(这是不正确的,因为表单应该是用AJAX功能生成的)。这是我用来生成表单的代码:

 <% using (Ajax.BeginForm("RemoveRelation", "Relations",
       new AjaxOptions { OnSuccess = "function() { RemoveRelation(10); } ", InsertionMode = InsertionMode.Replace, UpdateTargetId = "Relation10" },
       new { id = "DeleteForm10" }))
   { %>

此外,在Chrome上,我有另一个单独的Ajax.BeginForm.问题

<% using (Ajax.BeginForm("AddRelation", "Relations", new AjaxOptions { InsertionMode = InsertionMode.Replace, UpdateTargetId = "AddRelation" }, new { id = "AddRelationForm" }))
  { %>

上面的"开始表单"代码用于将"关系"添加到列表中,而不是删除它们。我再次强调,在IE9和FF4上,上述操作是按预期进行的,在chrome上,不是添加一个并通过ajax进行更新,而是添加两次记录并再次刷新整个页面,而不是进行ajax更新。

为什么铬会坏掉?

为什么不';t Ajax.在Chrome中开始工作

Microsoft AJAX和某些webkit浏览器存在问题。我自己不久前也遇到过这个问题,解决方法很简单。创建一个webkit.js文件并将其放入内容中:

Sys.Browser.WebKit = {}; //Safari 3 is considered WebKit
if( navigator.userAgent.indexOf( 'WebKit/' ) > -1 )
{
    Sys.Browser.agent = Sys.Browser.WebKit;
    Sys.Browser.version = parseFloat( navigator.userAgent.match(/WebKit'/('d+('.'d+)?)/)[1]);
    Sys.Browser.name = 'WebKit';
}

然后,在ScriptManager中或页面中的某个位置(最好是在母版页中,我在末尾添加了它),添加脚本引用:

<Scripts>
    <asp:ScriptReference Path="webkit.js" />
</Scripts>
//OR
<script src="webkit.js">

我记不起我找到信息的原始网站了,但这是我从这个页面上得到的。祝你好运

您可以更新您的项目以使用asp.net MVC 3,在MVC 3中,jquery ajax是默认的

我找到了一个奇怪的问题解决方案。我通过一个类似于的"a"标签调用ajax表单的提交

<A href='#' onclick="javascript:$('#ajaxform').submit();">Remove</a>

出于某种原因,从"a"标记调用".submit()"在chrome中出现问题,导致整个页面刷新而不是ajax调用。我使用以下代码解决了这个问题:

<input type='submit' value='Remove' />

当我需要在输入中添加javascript命令以在删除前请求确认时,这个解决方案也起作用。唯一的抱怨是,我需要交换一些标记,以确保我的按钮出现在他们提交的表单中(我知道这在所有情况下都不可能)。