2016-05-10 8 views
1

申し訳ありませんが、これは私を狂ったものにしています。これは私が以前にしたことですが、なんらかの理由でうまくいきません。jquery ajax urlサーバーパスを含まない

私がクリックしたときのjs機能を起動して、パラメータを渡すHTMLボタンがあります。

<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コントローラに渡し、operacionという名前のパラメータを必要とするAutorizarOperacionという名前のアクションを実行します。 URLはhttp://localhost:port/Operaciones/AutorizarOperacionようにする必要がありますが、代わりにデバッガコンソールには、次のようなエラーがスローされます。

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

私はなぜdont'tが、明らかパスはサーバ部分が欠落しています。私はURLを書くためにセリアラルな方法を試みましたが、それらはすべてそのように表示されます。

ありがとうございます。

+3

'ウィンドウ'は' BASE_URL'プロパティを持っていません。あなたのコードのどこかで定義していない限り、それはうまくいきません。 –

答えて

2

私はあなたがプロトコル、ホスト名とポートを必要と理解だけでなく、あなたはこのようにそれを取得する必要があります

url: baseUrl + serviceUrl, 
+0

うん、それだった。私はレイアウトのベースURLを決定する別のアプリでこの関数を複製するために使用されました。私は現在のアプリケーションを構築しているので、これについてはわかりませんでした。どうもありがとう。 – Rambo3

2

あなたがプロパティ、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 
     }, 
    }); 
} 

BONUS持つオブジェクトdocument.location

使用することができます:私は、あなたがバベル/ ES6を使用することが起こる場合は、このようなものをきれいにすることができますが連結のためにテンプレート文字列を使用することを愛する。

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

をしてから、スクリプトでそれを使用します:

const {protocol, hostname} = document.location; 
const port = document.location.port ? `:${document.location.port}` : ''; 
const serviceUrl = '/Operaciones/AutorizarOperacion'; 
const url = `${protocol}//${hostname}${port}${serviceUrl}`; 
関連する問題