2010-03-06 2 views
1

J'ai ce script chargé sur une page:Asp.net MVC jQuery Ajax appelle à JsonResult renvoyaient aucune donnée

(function() { 
      window.alert('bookmarklet started'); 
      function AjaxSuccess(data, textStatus, xmlHttpRequest) { 
       if (typeof (data) == 'undefined') { 
        return alert('Data is undefined'); 
       } 
       alert('ajax success' + (data || ': no data')); 
      } 
      function AjaxError(xmlHttpRequest, textStatus, errorThrown) { 
       alert('ajax failure:' + textStatus); 
      } 
      /*imaginarydevelopment.com/Sfc*/ 
      var destination = { url: 'http://localhost:3041/Bookmarklet/SaveHtml', type: 'POST', success: AjaxSuccess, error: AjaxError, 
       dataType: 'text',contentType: 'application/x-www-form-urlencoded' 
      }; 
      if (typeof (jQuery) == 'undefined') { 
       return alert('jQuery not defined'); 
      } 

      if (typeof ($jq) == 'undefined') { 
       if (typeof ($) != 'undefined') { 
        $jq = $; 
       } else { 
        return alert('$jq->jquerify not defined'); 
       } 
      } 
      if ($jq('body').length <= 0) { 
       return alert('Could not query body length'); 
      } 
      if ($jq('head title:contains(BookmarkletTest)').length > 0) { 
       alert('doing test'); 
       destination.data = { data: 'BookmarkletTestAjax' }; 
       $jq.ajax(destination); 
       return; 
      } 

     })(); 

lorsqu'il est exécuté localement dans Cassini VS2008 le succès ajax montre la chaîne retournée de Asp.net MVC, lorsqu'il est exécuté à distance, les données de succès ajax sont nulles. Voici la méthode du contrôleur qui tire à la fois localement et quand ils sont exécutés à distance:

[AcceptVerbs(HttpVerbs.Post | HttpVerbs.Get)] 
    public string SaveHtml(string data) 
    { 
     var path = getPath(Server.MapPath); 
     System.IO.File.WriteAllText(path,data); 
     Console.WriteLine("SaveHtml called"); 
     Debug.WriteLine("SaveHtml called"); 

     //return Json(new { result = "SaveHtml Success" }); 
     return "SaveHtml Success"; 
    } 

Une fois que je l'ai travail que j'allais supprimer l'EEG, mais l'accès à l'heure actuelle la méthode saveHTML directement à partir du navigateur Web produit les résultats escomptés lors du test . Donc, il y a quelque chose qui cloche dans mon javascript, je crois, parce que quand j'y arrive avec les outils de développement de chrome, je vois que les données sont nulles, et le xmlHttpRequest ne semble pas avoir le résultat escompté là non plus.

Je suis chargement jquery via http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js

Répondre

1

Vous pouvez envoyer des données à un autre domaine en utilisant get/post régulier, mais aucune donnée ne peut revenir. pour récupérer les données, vous devez utiliser JSONP

1

Quand il est exécuté « à distance » — sur un vrai serveur — quel est le nom de domaine? Quelle est l'URL qui est la cible de la requête Ajax? Ces domaines doivent être les mêmes, vous savez. Vous ne pouvez pas déployer à http://your.application.domain/foo et puis émettre des demandes Ajax à http://some.other.domain/bar en raison de restrictions de sécurité.

éditer désolé je prends ça en arrière; pas assez de café ce matin :-)

+0

bien ... la demande fonctionne, les données sont envoyées, la réponse ajax est un succès, mais il n'y a pas de données dans la réponse. Il est inter-site, mais comme api feuille de calcul de Google et ces 2 ressources disent que c'est faisable: http://www.west-wind.com/Weblog/posts/107136.aspx http://jeffancel.com/archive/2009/ 04/05/70.aspx http://code.google.com/apis/gdata/docs/json.html – Maslow

+0

Vous ne faites pas cela avec JSONP, cependant - vous essayez simplement de faire un XMLHttpRequest simple. Vous devez indiquer à jQuery que vous voulez utiliser JSONP, et le serveur doit s'y attendre et savoir répondre avec le bon type de texte JSON/Javascript. – Pointy

+0

pouvez-vous expliquer cela un peu plus en détail? Je ne vous attrape pas – Maslow

Questions connexes