2012-09-19 1 views
0

J'ai un appel ajax qui travaille bien sur un site Web hébergé jusqu'à récemmentNom du contrôleur n'est pas passé sur appel ajax sur MVC3

Définie comme celui-ci

$.ajax({ 
     url: 'GetItemsForCountry', 
     type: 'GET', 
     data: "country=" + country, 
     success: function (items) { 
      $("#Items").empty(); 
      $("#Items").attr("disabled", false) 
      $.each(items, function (i, c) { 
       $("#Items").append($('<option></option>').val(c.Value).html(c.Text)) 
      } 
       ); 
     }) 

Lorsque je tente de le déboguer localement dans VS, il fonctionne très bien et je le vois passer mon contrôleur sur la ligne ...

http://localhost:9000/Home/GetItemsForCountry?country=USA 

quand je le lance avec elle sur le serveur hébergé, il est passé comme

http://servername/GetItemsForCountry?country=USA. 

Il ne faisait pas cela avant.

Est-ce que quelqu'un a une idée pourquoi? ou connaissez un moyen de MapRoute pour que cela ne donne pas une erreur 404?

Merci pour toute aide.

David

+0

De quelle URL est-il appelé depuis le serveur? Qu'en est-il sur localhost? – parKing

+0

Hmmm .. il se trouve être la page d'accueil simplement le www.servername.com – DavieDave

+0

Si je mets dans l'URL complète comme www.servername.com/Home/Index et puis exécutez-le ... c'est bien et l'appel ajax doesn 't fail – DavieDave

Répondre

0

Si vous modifiez l'URL en /home/getitemsforcountry, cela fonctionnera sur le serveur et localement. Le simple fait d'utiliser Getitemsforcountry va essayer de virer de bord sur la "zone" actuelle du site dans lequel vous vous trouvez.

+0

merci j'apprécie – DavieDave

0

Il est une URL relative que vous utilisez donc il va utiliser ce que jamais le chemin actuel. Comme c'est un home url, je suppose qu'il utilise également la route par défaut. Il semble que votre test localhost passe à http://localhost:28347/home/index au lieu de simplement l'URL racine alors que votre test de serveur va à l'URL racine /. Une façon de lutter contre cela est d'utiliser

$.ajax({ 
    url: '@Url.RouteUrl(new { controller = "Home", action= "GetItemsForCountry"})', 
    type: 'GET', 
    data: "country=" + country, 
    success: function (items) { 
     $("#Items").empty(); 
     $("#Items").attr("disabled", false) 
     $.each(items, 
      function (i, c) { 
       $("#Items").append($('<option></option>').val(c.Value).html(c.Text)) 
      } 
     ); 
}) 

Cela devrait résoudre le chemin pour vous quel que soit l'appel.

+0

hmmm J'essaye ceci et ai des caractères illégaux dans l'erreur de chemin. – DavieDave

+0

Je pense que c'est parce qu'il ne résout pas l'action url avant de faire l'appel ajax ... http: // localhost: 28347/Home/@Url.RouteUrl (nouveau% 20% 7B% 20controller% 20 =% 20% 22Home% 22 ,% 20action =% 20% 22GetItemsForCountry% 22% 7D)? Country = États-Unis – DavieDave

+0

Où se trouve cet appel? Dans un fichier javascript ou sur la page? – Buildstarted

Questions connexes