AJAX成功服务器端功能

AJAX Success Function on Server

本文关键字:功能 服务器端 成功 AJAX      更新时间:2023-09-26

这在我的开发机器上工作,但在生产服务器上不行。我试图用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");
        }
    }

视图:

serviceinfopartial

@model string
<p>
    Немає опису</p>

serviceinfo

<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

ahhhhhhhhhhhh,另一个硬编码url:

url: '/ServiceInfo/ServiceInfoPartial',

永远不要在ASP中硬编码像这样的url。NET MVC应用程序。

总是使用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并使用帮助程序生成它们的原因=>这是因为帮助程序处理这种情况。使用helper的另一个好处是,如果你以后决定改变Global.asax中路由的布局,你不需要修改所有的javascript文件等…您的url管理集中在一个位置

这对我有用,但只在Chrome 53中测试过:

在你的。cshtml文件中创建一些全局作用域变量,只是要注意作用域问题,并给你的变量起唯一的名字。

<script>
    globalUrl = '@Url.Action("ServiceInfoPartial", "ServiceInfo")';
</script>

然后引用你的js文件…

<script type="text/javascript" src="yourJsFile.js"></script>

在你的yourJsFile.js:

url: globalUrl,