如何使jj调用url相对于js文件目录

时间:2014-03-01 20:26:25

标签: jquery ajax asp.net-mvc mono

对于一个网站,Chrome和IE使用网址调用ajax调用而不预先添加 javascript文件目录到url。

HTML:

<!DOCTYPE html>
<html>
<head>
 <script src="/admin/pos.js?v=r2zPvjSAIOf2x8oTbPdUvRh9sFohBNwKM2QOVoOYSug1"></script>
.....

pos.js:

var xhr = $.ajax({
            url: '/api/Registers/Test',
            timeout: 3 * 1000,
            dataType: 'json',
            cache: false
        });

通过在浏览器网址中输入http://1.2.3.4/admin/Sale来运行应用程序。

Chrome控制台显示使用错误的网址调用ajax调用:

http://1.2.3.4/api/Registers/Test?_=1393704244572

如何通过将admin添加到url:

来强制浏览器使用正确的URL
http://1.2.3.4/admin/api/Registers/Test?_=1393704244572

以上代码适用于某些网站,但已停止工作,其中一个网站的IP地址为1.2.3.4 在其他站点中使用没有dns名称,应用程序映射到站点根目录。 应用程序也改变了,单声道升级到3.2.8 不知道是什么导致浏览器停止创建正确的URL?

我不想在javascript中使用base html元素或使用绝对url。根据我的理解,这段代码应该没有它们

ASP.NET MVC4应用程序在Debian的Mono 3.2.8 + mod_mono中运行。

使用jquery。

1 个答案:

答案 0 :(得分:0)

尝试使用UrlHelper.RouteUrl方法。

var xhr = $.ajax({
 url: '@Url.RouteUrl("Default", new { controller = "Registers", action = "Test" })',
 ...

修改 要生成javascript文件的路径,您可以使用另一个帮助程序:

<script src="@Url.Content("~/admin/pos.js")"></script>

<强> EDIT2 您最好也可能是唯一的解决方案是将URL作为js函数的参数传递

你在pos.js中的功能:

function MyFunction(url)
{
  var xhr = $.ajax({
  url: url,
  ...
}

然后从cshtml中调用它,如:

MyFunction('@Url.RouteUrl("Default", new { controller = "Registers", action = "Test" })');