【问题标题】:AJAX Success Function on Server服务器上的 AJAX 成功函数
【发布时间】: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

【问题讨论】:

    标签: javascript c# jquery asp.net-mvc razor


    【解决方案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 对我的回答(对我的问题)有何看法。 stackoverflow.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,
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-18
      • 1970-01-01
      • 2015-09-07
      • 2012-06-30
      • 1970-01-01
      • 1970-01-01
      • 2012-08-23
      • 1970-01-01
      相关资源
      最近更新 更多