2016-05-10 4 views
1

Es tut mir leid Jungs, aber das macht mich verrückt. Das habe ich schon mal gemacht, aber aus irgendeinem Grund funktioniert es nicht.jquery ajax url nicht einschließlich Serverpfad

Ich habe eine HTML-Schaltfläche, die eine js-Funktion ausgelöst, wenn darauf geklickt und übergibt einen Parameter:

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

Als nächstes meine js Funktion:

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 
     }, 
    }); 
} 

Die Sache ist, sollte diese Ajax-Funktion gehen Operaciones-Controller und führen Sie eine Aktion namens AutorizarOperacion aus, die einen Parameter namens operacion erwartet. Die URL sollte wie http://localhost:port/Operaciones/AutorizarOperacion sein, sondern die Debugger-Konsole führt den folgenden Fehler:

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

ich dont't warum, aber eindeutig der Weg den Server-Teil fehlt. Ich habe versucht, die URL auf verschiedene Arten zu schreiben, aber alle rendern so.

Vielen Dank.

+3

Das 'Fenster 'hat keine 'BASE_URL'-Eigenschaft. Wenn Sie das also nicht an einer anderen Stelle in Ihrem Code definieren, wird es nicht funktionieren. –

Antwort

2

gut wie ich verstehen, was Sie brauchen Protokoll, Hostnamen und Port sollten Sie es wie folgt erhalten:

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

Und es dann in Ihrem Skript verwenden:

url: baseUrl + serviceUrl, 
+0

Yup, das war es. Ich wurde verwendet, um diese Funktion in einer anderen App zu replizieren, die die Basis-URL im Layout bestimmt, und da ich die aktuelle App baue, wusste ich nichts darüber. Danke vielmals. – Rambo3

2

können Sie verwenden document.location

Das Objekt verfügt über die Eigenschaften , hostname und 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 
     }, 
    }); 
} 

BONUS: Wenn Sie babel geschehen sein mit/es6 Sie Dinge schönere wie diese machen kann, ich liebe die Verwendung von Template-Strings für die Verkettung.

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