javascript - tablas - ¿Cómo hago saber a JS sobre la raíz de la aplicación?
tablas dinamicas html javascript (2)
Tengo algunos javascript que hacen referencia a
/jobs/GetIndex
en un proyecto MVC.
Esto funciona muy bien cuando lo ejecuto localmente porque tengo un
Controller
llamado
JobsController
.
Cuando lo implemento, implemento la aplicación en una subcarpeta ''Trabajos'', lo que significa que la URL debe convertirse en
http://site/jobs/jobs/GetIndex
pero va a
http://site/jobs/GetIndex
, supongo que porque JavaScript no sabe cuál es la ''URL raíz'' y utiliza el sitio como raíz.
¿Cómo puedo hacer que funcione en ambos entornos?
Agregue
<base href="/jobs">
a su etiqueta principal.
Especificará la raíz.
Esto se explica con más detalle aquí https://docs.angularjs.org/guide/ $ location
Si simplemente le interesa obtener la url raíz / base del sitio para que pueda agregarla para obtener la otra url que busca, simplemente puede usar
/
como el primer carácter de su url.
var urlToJobIndex2= "/jobs/GetIndex";
Aquí hay un enfoque alternativo
si desea algo más que la raíz de la aplicación (Ej: URL específicas (creadas utilizando métodos auxiliares de
Url.RouteUrl
como
Url.RouteUrl
etc.)
Puede usar el método auxiliar
Url.Content
en su vista de afeitar para generar la url a la base de la aplicación, asignarla a una variable de JavaScript y usarla en su otro código js para construir sus otras urls.
Siempre asegúrese de usar el espacio de nombres de JavaScript al hacerlo para evitar posibles problemas con las variables globales de JavaScript.
Si desea obtener la URL de un método de acción específico, puede utilizar los métodos auxiliares
Url.Action
o
Url.RouteUrl
.
Entonces, en su vista de afeitar ( archivo de diseño o vista específica ), puede hacer esto.
<script>
var myApp = myApp || {};
myApp.Urls = myApp.Urls || {};
myApp.Urls.baseUrl = ''@Url.Content("~")'';
myApp.Urls.jobIndexUrl= ''@Url.Action("GetIndex","jobs")'';
</script>
<script src="~/Scripts/PageSpecificExternalJsFile.js"></script>
Y en su archivo
PageSpecificExternalJsFile.js
, puede leerlo como
var urlToJobIndex= myApp.Urls.jobIndexUrl;
// Or With the base url, you may safely add the remaining url route.
var urlToJobIndex2= myApp.Urls.baseUrl+"jobs/GetIndex";
Here hay una respuesta detallada sobre lo mismo, pero usando esto en una página / vista específica
Js angular
Es posible que necesite la (s) url (es) relativa (s) correctas en su controlador / servicios / directivas angulares. El mismo enfoque funcionará también para su código angular.
Simplemente construya el objeto de espacio de nombres js y use el proveedor de
value
angular para pasar los datos a sus controladores / servicios / directivas angulares como se explica
en esta publicación
en detalle con código de ejemplo.