获取正确的URL以从JS文件进行ajax调用

时间:2015-10-17 18:35:44

标签: javascript jquery ajax asp.net-mvc

我正在使用ASP MVC应用程序。我创建了一个clients.js文件,该文件具有调用控制器然后检索数据的ajax方法。我的问题是该页面所在的URL看起来像这样:

http://my.clients.com/GST/2015-4/LEBIN/Profiles/ClientProfile/Index/79

在我的ajax方法中我有

$.ajax({
  url: "ClientProfile/UpdateClient",
  context: ..
  data: ...
}).done(function() {
  ...;
});

因此,使用该格式我得

http://my.clients.com/GST/2015-4/LEBIN/Profiles/ClientProfile/Index/79/ClientProfile/UpdateClient

但我需要:

http://my.clients.com/GST/2015-4/LEBIN/Profiles/ClientProfile/UpdateClient

此外,如果我在这个网址之前添加/:

$.ajax({
  url: "/ClientProfile/UpdateClient",
 ...

它将URL格式化为:

  http://my.clients.com/UpdateClient

我如何获得正确的路径?我只需要用正确的动作/Index/83替换/UpdateClient,而不需要时髦的替换或逻辑。

附加信息

为什么我不想添加整个网址部分的共鸣...是因为/ 2015-4 /部分可能会多次改变

3 个答案:

答案 0 :(得分:3)

根据我的评论:

yourJsFile.js:

var AjaxCallToController = {
    callAjax: function(url){
        $.ajax({
           url: url,
           context: ..
           data: ...
           }).done(function() {
           ...;
           });
    }
}

在yourView.cshtml中

<script>
AjaxCallToController.callAjax('@Url.Action("UpdateClient", "ClientController"');
</script>

类似的东西。

答案 1 :(得分:1)

只需使用../,这样你就可以回到1个文件夹,所以看起来应该是这样的

$.ajax({
  url: "../../../ClientProfile/UpdateClient",
  context: ..
  data: ...
}).done(function() {
  ...;
});

答案 2 :(得分:0)

您可以通过定义默认site URL来实现这一点,方法是将其添加到主模板标题中,然后在任何.js文件中调用它,如下所示:

定义标题URL:

<script> var site_url = '<?php echo site_url() ?>';</script>
// define the <?php echo site_url() ?> in your main PHP config file.

然后,您可以在JavaScript文件中以不同的方式调用该URL,例如:

window.location = site_url +'dashboard';

jQuery.post(site_url + 'account/forgot', jQuery(this).serialize(), function (res) {
    // your code here
});

$.ajax({
    type: "POST",
    url: site_url + 'home/newsletters'
});

谢谢