服务器上的 AJAX 成功函数
Posted
技术标签:
【中文标题】服务器上的 AJAX 成功函数【英文标题】:AJAX Success Function on Server 【发布时间】:2011-12-15 02:54:12 【问题描述】:这适用于我的开发机器,但不适用于生产服务器。我正在尝试使用 ajax 更新一些 div,但它们没有更新,尽管其他部分工作正常。我在服务器上使用 IIS 6。 当我在服务器端使用 firebug 调试这段代码时,它没有遇到我添加到成功函数中的任何断点。
脚本:
function updateServiceInfo(nodeId)
var id = id: nodeId ;
$.ajax(
url: '/ServiceInfo/ServiceInfoPartial',
type: 'GET',
data: id,
dataType: 'html',
success: function (data)
$('#serviceInfoContent').html(data);
,
error: function (request, error)
);
控制器:
public class ServiceInfoController : Controller
public ActionResult ServiceInfo()
return PartialView("ServiceInfo");
public ActionResult ServiceInfoPartial(string id)
return PartialView("ServiceInfoPartial");
观看次数:
服务信息部分
@model string
<p>
Немає опису</p>
服务信息
<div id="serviceInfo">
<div id="ContainerPanel" class="ContainerPanel">
<div id="serviceInfoHeader" class="collapsePanelHeader">
<div id="dvHeaderText" class="HeaderContent">
Опис сервісу</div>
<div id="dvArrow" class="ArrowClose">
</div>
</div>
<div id="serviceInfoContent" class="serviceInfoContent">
</div>
</div>
</div>
控制台返回的响应是
GET http://localhost/Managers/GetManagers?nodeId=563344 404 Not Found 42ms
【问题讨论】:
【参考方案1】:Ahhhhhhhhhhhhhh,另一个硬编码网址:
url: '/ServiceInfo/ServiceInfoPartial',
从不在 ASP.NET MVC 应用程序中硬编码这样的 URL。
总是使用 url 助手来生成它们:
url: '@Url.Action("ServiceInfoPartial", "ServiceInfo")',
或者如果这是在一个单独的 javascript 文件中,您不能使用 url 助手,只需在某些 DOM 元素上使用 HTML5 data-* 属性:
<div id="serviceInfo" data-url="@Url.Action("ServiceInfoPartial", "ServiceInfo")">
...
</div>
然后在你的javascript中简单地:
url: $('#serviceInfo').data('url'),
您的代码在 IIS 中托管时无法运行的原因是,在 IIS 中您可能将应用程序托管在虚拟目录中,因此正确的 url 不再是 /ServiceInfo/ServiceInfoPartial
而是 /YourAppName/ServiceInfo/ServiceInfoPartial
。这就是为什么你永远不应该对任何 url 进行硬编码并使用助手来生成它们的原因 => 这是因为助手处理这种情况。使用助手的另一个好处是,如果您以后决定更改 Global.asax
中的路由布局,您将不需要修改所有 javascript 文件等...您的 url 管理集中在一个位置。
【讨论】:
是的,我的 javasript 代码在单独的文件中。和 url:'@Url.Action("ServiceInfoPartial", "ServiceInfo")',不起作用。而 htis HTML5 属性将在例如 ie7 中工作? @andronz,是的,它可以在 IE7 中运行。这就是 ASP.NET MVC 3 不显眼的客户端验证和 AJAX 已经使用的。即使 IE7 很垃圾并且不支持 HTML5,jquery 也会愉快地解释附加到 DOM 元素的那些属性。由于 IE7 从未听说过 HTML5 或 data-* 属性,它会默默地忽略它们。 @DarinDimitrov,关于您在单独的 js 文件中写的内容 1. 为什么将 url 保存在 div 中而不是隐藏字段中? 2.如果你这样做了,javascript和视图是耦合的,不是吗? @DarinDimitrov 对我的回答(对我的问题)有何看法。 ***.com/questions/7902213/… 不是用简单的方式解决任何问题吗?【参考方案2】:这对我有用,但只在 Chrome 53 中测试过:
在您的 .cshtml 文件中创建一些全局范围变量,请注意范围问题并为您的变量指定唯一名称。
<script>
globalUrl = '@Url.Action("ServiceInfoPartial", "ServiceInfo")';
</script>
然后引用你的js文件...
<script type="text/javascript" src="yourJsFile.js"></script>
在 yourJsFile.js 中:
url: globalUrl,
【讨论】:
以上是关于服务器上的 AJAX 成功函数的主要内容,如果未能解决你的问题,请参考以下文章