2009-11-30 6 views
0

J'ai un site qui ont besoin d'obtenir des données à partir d'un sit différent qui utilise MVC/asp.netjquery load retourne vide, possible problème MVC 2?

Les données pour se charger est de ces pages:
http://charity.hondaclassic.com/home/totaldonations
http://charity.hondaclassic.com/Home/CharityList

Cela devrait être une évidence, mais pour une raison quelconque je reçois une réponse vide, voici mon JS:

<script> 
    jQuery.noConflict(); 
    jQuery(document).ready(function($){ 
      $('.totalDonations').load('http://charity.hondaclassic.com/home/totaldonations'); 
     $('#charityList').load('http://charity.hondaclassic.com/home/CharityList'); 
    }); 

</script> 

dans firebug Je vois la demande est faite et revenir avec une réponse de 200 OK b Si la réponse est vide, si vous naviguez vers ces pages, ils fonctionnent bien! Que diable?

Voici les actions du contrôleur à partir du site MVC:

public ActionResult TotalDonations() { 
      var total = "$" + repo.All<Customer>().Sum(x => x.AmountPaid).ToString(); 
      return Content(total); 
     } 

     public ActionResult CharityList() { 
      var charities = repo.All<Company>(); 
      return View(charities); 
     } 

Que quelqu'un ce que petite chose stupide je manque - cela devrait me avoir pris 5 minutes et il a été heures!

+0

quand vous allez sur le site charity.hondaclassic.com, une erreur se produit, * doit spécifier l'attribut 'varByParam' * –

+0

pour corriger mon commentaire, le lien qui ne fonctionne pas est celui qui se trouve dans votre question, les liens à l'intérieur de votre code fonctionne. –

+0

a corrigé mon erreur d'orthographe et j'ajoutais dans la mise en cache rapide, désolé à ce sujet – Slee

Répondre

2

Le same origin policy empêche le chargement HTML à partir d'un autre site web via AJAX. La bonne façon de procéder serait de faire en sorte que les méthodes détectent si la requête provient d'AJAX et retournent JSONP à la place.

public ActionResult TotalDonations(string callback) 
{ 
    var total = "$" + repo.All<Customer>().Sum(x => x.AmountPaid).ToString(); 
    if (!string.IsNullOrEmpty(callback)) 
    { 
     return Content(callback + "({ total: " + total + " });"); 
    } 
    else 
    { 
     return Content(total); 
    } 
} 

... 
$.getJSON('http://charity.hondaclassic.com/home/totaldonations?callback=?', 
      function(data) { 
       $('.totalDonations').html(data.total); 
      }); 
+0

qui n'a pas changé une chose pour moi - merci - je l'ai juste fait côté serveur – Slee

+0

Je suis sûr que la même politique d'origine est le problème ici, merci pour l'aide – Slee

0

votre lien totaldonations manque le o au total

> $('.totalDonations').load('http://charity.hondaclassic.com/home/ttaldonations'); 

devrait être

$('.totalDonations').load('http://charity.hondaclassic.com/home/totaldonations'); 
+0

Nice pickup @jmein – griegs

+0

désolé, je l'ai fait pour tester ce qui se passe pour un 404 et j'ai oublié de le changer avant de poster, retourne encore vide contenu – Slee

0

je fini par faire juste côté serveur pour éviter la même politique d'origine mentionnée ci-dessus:

Dim totalDonations As String 
    Dim charities As String 

    Using Client As New System.Net.WebClient() 
     totalDonations = Client.DownloadString("http://charity.hondaclassic.com/home/totaldonations") 
     charities = Client.DownloadString("http://charity.hondaclassic.com/home/CharityList") 
    End Using 

a fonctionné comme un charme.