2011-09-20 10 views
5

che sto cercando di fare una chiamata AJAX in questo modo:Posso specificare l'URL relativo quando si utilizza jQuery.get?

$.get('/home/myInfo', function (data) 

    { 

     .... 

    }); 

sto chiamando da una pagina che e ': http://localhost/myapp/home/index

Quando provo a fare la chiamata di cui sopra, va a : http://localhost/myapp/home/index/home/myInfo

voglio che vada a http://localhost/myapp/home/myInfo

devo specificare URL assoluto?

+0

hai provato semplicemente con "myInfo" o "../myInfo"? –

+0

ho provato myInfo quindi ho http: // localhost/myapp/home/index/myinfo –

risposta

14

In questo caso, in maiuscole URL di tipo hardcode come in un'applicazione ASP.NET MVC. Usare sempre aiutanti URL quando si tratta con gli URL, in questo modo:

$.get('@Url.Action("MyInfo", "Home")', function (data) { 
    .... 
}); 

o se questo è in un file JavaScript separato dove non è possibile utilizzare aiutanti lato server, così si potrebbe ad esempio utilizzare HTML 5 dati- * attributi su alcuni elemento DOM tat si sta AJAXifying, come un div o qualcosa del genere:

<div id="mydiv" data-url="@Url.Action("MyInfo", "Home")">Click me</div> 

e poi:

$('#mydiv').click(function() { 
    $.get($(this).data('url'), function (data) { 
     .... 
    }); 
}); 

o se si sta AJAXifying un modulo o un ancoraggio:

$('#myanchor').click(function() { 
    $.get(this.href, function (data) { 
     .... 
    }); 
    return false; 
}); 

in cui l'ancora sarebbe, naturalmente, sono stati generati utilizzando aiutanti:

@Html.ActionLink("click me", "MyInfo", "Home", null, new { id = "myanchor" }) 

vedere? Non c'è bisogno di url hardcode. Non farlo perché si interromperà nel momento stesso in cui modifichi lo schema dei percorsi in Global.asax. Seguendo questa tecnica il tuo codice sarà totalmente agnostico a qualsiasi modifica della struttura dei tuoi percorsi.

+0

Ah sì, sapevo che ci doveva essere un modo migliore. Grazie. –

+3

Qualche motivo per il downvote? Si prega di lasciare un commento durante il downvoting spiegando il ragionamento che sta dietro. –

+1

URL hardcoding WRT: Mi frustra sempre il fatto che i metodi di supporto OOB non siano consapevoli dell'intelligence. "MyInfo" e "Home" sono sempre stringhe magiche. ReSharper aiuta con questo, ma lascia comunque la possibilità di avere URL di azione illimitati – JoeBrockhaus

0

Sei sicuro di aver copiato e incollato correttamente il codice? Perché come hai tu, dovrebbe fare riferimento a http://localhost/home/myInfo. L'unica ragione per cui ho potuto vedere che facendo come hai descritto è se il codice è stato utilizzando un URL relativo in questo modo:

$.get('home/myInfo', function (data) 

    { 

     .... 

    }); 

In caso contrario, se si sta veramente usando il valore "/ home/myinfo" invece di " home/myInfo ", stai già facendo riferimento alla versione assoluta dell'URL (la definizione di un URL" assoluto "è che inizia con"/"). Ho eseguito alcuni test rapidi e sul mio computer locale, utilizzando "/ home/myInfo" viene richiesta una XHR a http://localhost/home/myInfo

Problemi correlati