我在MVC应用程序中对我的控制器进行了AJAX调用
Controller/FunctionName
$.ajax({
type: "GET",
contentType: "application/json; charset=utf-8",
url: '/Controller/FunctionName',
.
.
.
)};
使用MVC 4并使用JQUERY Ajax
函数,如上面的代码所示。当我从Visual studio运行时它完全正常。
我将此解密到服务器计算机并按预期正常工作。在AJAX调用中没有发现任何问题。
现在正尝试在我的本地计算机IIS 中部署它,这与我的服务器版本(IIS 7.5)
相同,但是对于firebug中的所有ajax调用我正在获得404
。 / p>
我验证了构建,甚至我指向我的网络文件夹,我仍在寻找出错的地方!!
它可以在其他IIS中运行,所以它不会是一个URL解决问题是我的建议。我错过了任何设置或任何及时的想法来解决这个问题会很棒。
由于
答案 0 :(得分:34)
这是正常的。您已将网址硬编码到控制器操作中:
url: '/Controller/FunctionName',
如果您在IIS的虚拟目录中部署应用程序,则正确的URL应为:
url: '/YourAppName/Controller/FunctionName',
这就是为什么你绝对不应该在ASP.NET MVC应用程序中硬编码url但总是使用url helper来生成它的原因:
url: '@Url.Action("FunctionName", "Controller")',
如果这个AJAX调用是在一个单独的javascript文件中,你不能使用服务器端助手,那么你可以从一些你是AJAX化的DOM元素中读取这个url。
例如,假设你有一个锚:
@Html.ActionLink("click me", "FunctionName", "Controller", null, new { id = "myLink" })
你是AJAXify:
$('#myLink').click(function() {
$.ajax({
url: this.href,
contentType: 'application/json; charset=utf-8',
type: 'GET',
.
.
.
)};
return false;
});
注意我们如何从帮助器生成的DOM元素中读取url。
结论和2条经验法则:
答案 1 :(得分:1)
只是Darin's answer的补充,如果“AJAX调用在一个单独的javascript文件中,你不能使用服务器端助手”,请使用隐藏字段在视图中存储url端点:
@Html.Hidden("URLEndpointName", Url.Action("FunctionName", "Controller"))
并阅读js中的隐藏字段:
url: $("#URLEndpointName").val(),
答案 2 :(得分:0)
我在IIS7.5的设置中发现的是“处理程序映射”'有一个名为' OPTIONSVerbHandler'未按正确顺序设置,因此返回为未知。
这项工作对我来说,我的localhost ajax正在调用我的网络服务器,它有一个不同的名称,它不应该给我一个CORS问题,但确实如此,这是我的解决方案。
打开IIS并单击左窗格中的服务器名称。在右侧窗格中,双击'处理程序映射'在中间窗格中。在右侧窗格中,选择'查看订购列表'。从那里找到' OPTIONSVerbHandler'和' svc-ISAPI-4.0_32bit',移动' OPTIONSVerbHandler'直到它高于' svc-ISAPI-4.0_32bit'。
确保您的处理程序'你的ajax通话中没有“访问控制 - 允许 - 来源”#39;在它。
答案 3 :(得分:0)
您可以在网址中使用双点:
$comp_supplies->where('name', $supply->name)->first()['supplier'] = $array2