我很抱歉,但这让我发疯了。这是我以前做过的事情,但由于某些原因它不起作用。
我有一个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
我不知道为什么但显然路径缺少服务器部分。我尝试过写一些网址的方法,但是他们都是这样写的。
非常感谢。
答案 0 :(得分:3)
您可以使用document.location
该对象具有属性protocol
,hostname
和port
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,