Problèmes relatifs au chemin relatif à l'appel Javascript Ajax
Bon, j'ai un fichier JavaScript avec les fonctions suivantes:
function AskReason() {
var answer = prompt("Please enter a reason for this action:", "");
if (answer != null)
DoReason(answer);
}
function createXMLHttpRequest() {
try {
return new XMLHttpRequest();
}
catch (e)
{ alert('XMLHttpRequest not working'); }
try {
return new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{ alert('Msxml2.XMLHTT not working'); }
try {
return new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{ alert('Microsoft.XMLHTTP not working'); }
alert("XMLHttpRequest not supported");
return null;
}
function DoReason(reason) {
var xmlHttpReq = createXMLHttpRequest();
var url = "/Shared/AskReason.ashx?REASON=" + reason;
xmlHttpReq.open("GET", url, true);
xmlHttpReq.send(null);
}
Cette ligne:
var url = "/Shared/AskReason.ashx?REASON=" + reason;
Est ce qui est à l'origine du problème.
Dans VS 2010 débogage de l'application du présent appel, les travaux de mon ashx gestionnaire.
Quand je bouge le projet d'un répertoire virtuel - exemple http://localhost/myapp
ce code va casser et j'ai du changer le javascript:
var url = "http://localhost/myapp/Shared/AskReason.ashx?REASON=" + reason;
Des idées sur comment je peux résoudre ce problème à travailler dans les deux environnements ou simplement d'accepter la modification manuelle lorsque je déployer des applications pour les serveurs?
Grâce,
Mike
source d'informationauteur MDV2000
Vous devez vous connecter pour publier un commentaire.
Pointu de la façon fonctionne, mais vous devez savoir à l'avance où vous allez déployer.
Alternativement, il suffit de ne pas commencer le chemin relatif avec un
/
:Qui sera résolu par rapport à l'actuel emplacement du document. Donc, si le document actuel est:
...puis qui permettra de résoudre à
Chemins qui commencent par un "/" (et pas de protocole & hôte) par rapport à la racine de l'hôte. Si vous déployez à ce que votre application est à l' "http://whatever/myapp" puis vos chemins relatifs à la racine commence par "/myapp".
Lorsque vous travaillez dans un serveur-côté de l'environnement qui implique une sorte de modèle de page de mécanisme, un truc commun est d'avoir qu'une partie du chemin une sorte de variable de configuration de sorte que vous pouvez écrire des pages avec les chemins comme:
Alors que "root" variable est développée en fonction de la configuration "/myapp" ou quoi que ce soit.
L'url
Est à la recherche pour le fichier dans le répertoire de racine [car c'est un chemin d'accès absolu], efficacement
Vous devez inclure le nom du répertoire virtuel OU de déterminer la structure appropriée:
De départ sans l' /vous donnera un chemin d'accès relatif ... si vous avez besoin de naviguer dans les répertoires utiliser ../Shared/style de notation, ou enfin l'utilisation de vos serveurs d'Annuaire de commande afin de déterminer votre chemin.
J'ai eu un problème similaire où une URL absolue était nécessaire, mais la référence cassé lors du passage de localhost sur le serveur de production. Je l'ai résolu en vérifiant si un "localhost" string existe en:
Ensuite, vous pouvez tout simplement faire:
Ensuite, vous pouvez ajouter
baseurl
en face de n'importe quelle url, vous devez référence.