服务器上的 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 成功函数的主要内容,如果未能解决你的问题,请参考以下文章

提交后更改提交按钮上的文本

ajax使用

AJAX JQuery 问题

Jquery各Ajax函数

Ajax用法查询

jQuery.ajax() 函数详解