jquery ajax url不包括服务器路径

时间:2016-05-10 20:43:59

标签: javascript jquery ajax asp.net-mvc

我很抱歉,但这让我发疯了。这是我以前做过的事情,但由于某些原因它不起作用。

我有一个html按钮,在单击时触发js函数并传递参数:

<button type="button" class="btn btn-default" onclick="aprobarOperacion(Operacion.value)" data-dismiss="modal">

接下来,我的js函数:

function aprobarOperacion(numeroOperacion) {

    var serviceUrl = "/Operaciones/AutorizarOperacion";

    $.ajax({
        type: "POST",
        dataType: "json",
        url: (window.BASE_URL == null) ? serviceUrl : window.BASE_URL + serviceUrl,
        data: JSON.stringify({
            operacion: numeroOperacion
        }),
        success: function (data) {
        //some code
        },
        error: function (data) {
        //some code
        },
    });
}

问题是,这个ajax函数应该转到Operaciones控制器,并执行一个名为AutorizarOperacion的动作,它需要一个名为operacion的参数。 URL应该类似http://localhost:port/Operaciones/AutorizarOperacion,但调试器控制台会抛出以下错误:

Failed to load resource: net::ERR_NAME_NOT_RESOLVED --> http://operaciones/AutorizarOperacion

我不知道为什么但显然路径缺少服务器部分。我尝试过写一些网址的方法,但是他们都是这样写的。

非常感谢。

2 个答案:

答案 0 :(得分:3)

您可以使用document.location

该对象具有属性protocolhostnameport

function aprobarOperacion(numeroOperacion) {
    var baseUrl = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ':' + window.location.port : '';
    var serviceUrl = "/Operaciones/AutorizarOperacion";

    $.ajax({
        type: "POST",
        dataType: "json",
        url: (window.BASE_URL == null) ? serviceUrl : window.BASE_URL + serviceUrl,
        data: JSON.stringify({
            operacion: numeroOperacion
        }),
        success: function (data) {
        //some code
        },
        error: function (data) {
        //some code
        },
    });
}

奖励:如果您正在使用babel / es6,您可以使这样的东西变得更漂亮,我喜欢使用模板字符串进行连接。

const {protocol, hostname} = document.location;
const port = document.location.port ? `:${document.location.port}` : '';
const serviceUrl = '/Operaciones/AutorizarOperacion';
const url = `${protocol}//${hostname}${port}${serviceUrl}`;

答案 1 :(得分:2)

我理解你需要协议,主机名和端口,你应该这样:

var baseUrl = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ':' + window.location.port: '');

然后在你的脚本中使用它:

url: baseUrl + serviceUrl,