2010-03-06 4 views
1

Я этот скрипт загружен на странице:Asp.net MVC JQuery Ajax звонки не JsonResult возвращать никаких данных

(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; 
      } 

     })(); 

, когда она выполняется локально в Кассини VS2008 в основе AJAX успеха показывает возвращаемую строку из Asp.net MVC, когда он запускается удаленно, данные успеха ajax равны нулю. Вот метод управления, который стреляет как локально, так и при удаленном запуске:

[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"; 
    } 

После того, как я он работает, я собирался удалить GET, но в настоящее время доступ к методу SaveHtml непосредственно из веб-браузера дает ожидаемые результаты при тестировании ,

Так что в моем javascript есть что-то не так, я верю, потому что, когда я нахожусь там с инструментами разработчика хром, я вижу, что данные равны нулю, а xmlHttpRequest не имеет ожидаемого результата в нем нигде.

я загружаю JQuery через http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js

ответ

1

Вы можете отправить данные в другой домен, используя регулярный почтовый ящик, но данные не возвращаются. чтобы извлечь данные обратно, вам нужно использовать JSONP

1

Когда это работать «удаленно» — на реальном сервере — что доменное имя? Каков URL-адрес, который является объектом запроса Ajax? Вы знаете, эти домены должны быть одинаковыми. Вы не можете развернуть до http://your.application.domain/foo, а затем выдавать Ajax-запросы до http://some.other.domain/bar из-за ограничений безопасности.

Редактировать Извините, что я забираю это; не хватает кофе этим утром :-)

+0

ну ... запрос работает, данные отправляются, ответ ajax подходит как успешный, но в ответе нет данных. Это кросс-сайт, но как электронная таблица google, и эти 2 ресурса говорят, что это выполнимо: 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

Вы не делаете этого с JSONP, однако - вы просто пытаетесь сделать простой XMLHttpRequest. Вы должны сказать jQuery, что вы хотите использовать JSONP, и сервер должен ожидать этого и знать, чтобы ответить правильным текстом JSON/Javascript. – Pointy

+0

Вы можете объяснить это чуть подробнее? Я не поймаю вас – Maslow

Смежные вопросы