2013-05-29 3 views
0

Я просто изучаю AJAX и позвонил своему контроллеру, но он не работает.MVC Ajax не работает

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

Любая помощь была бы принята с благодарностью.

Мой JQuery выглядит следующим образом:

function AjaxVoteClick(itemId) { 
    var Url = '@Url.Action("UpVote", "AJAX")' + '?ideaId=' + itemId; 

    $.ajax({ 
     url: Url, 
     type: 'POST', 
     timeout: 60000, 
     dataType: 'json', 
     tryCount: 0, 
     retryLimit: 3, 
     success: function(data) { 
      alert("Success"); 
     }, 
     error: function (httpRequest, textStatus, errorThrown) { 
      alert(httpRequest + "Status = " + textStatus + ", error = " + errorThrown); 
     } 
    }); 
} 

Когда я отладки это делает запрос в порядке, и с правильным идентификатором, но затем возвращается на ошибку.

Контроллер делает то, что он должен делать, но я покажу это в любом случае:

[HttpPost] 
    public virtual JsonResult UpVote(int ideaId) 
    { 
     IdeaGenEntities ctx = new IdeaGenEntities(); 

     var currentIdea = (from m in ctx.Ideas 
          where m.ID == ideaId 
          select m).Single(); 

     var model = new VoteModel(); 
     model.Initialize(currentIdea); 

     int currentVotes = model.Votes; 
     currentVotes += 1; 

     currentIdea.Votes = currentVotes; 
     ctx.SaveChanges(); 

     return Json(model); 

    } 

Глядя на консоли Firebug дает очень мало. Ошибка проходит через полсекунды, если я не настаиваю. Тогда в заголовке у вас есть это:

Принять приложения/JSON, текст/JavaScript, /; q = 0.01 Accept-Encoding gzip, deflate Accept-Language en-US, en; q = 0,5 Приложение типа контента/json Cookie __utma = 111872281.1986143499.1358265304.1358511066.1358786646.8; __utmz = 111872281.1358265304.1.1.utmcsr = (прямой) | utmccn = (прямой) | utmcmd = (нет); ASP.NET_SessionId = natvmbqvjfnm11deiek1hngi; .ASPXAUTH = 4C0D282B36C410B3FA8271342C22B0A4435D35CD8F2BFE5B58E3F2A643993963F56D3F410A4E586FC44DC68B5737F9E7EEC18FB32E629014DECAA43B818DC49358E618CA73815EB1BBF977CE04342146B7F5EA30BB7D0D2328FC3B75F1C4CA65 Хост localhos Referer LocalHost User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; с.в.: 21,0) Gecko/20100101 Firefox/21,0 X-Requested-С XMLHttpRequest

EDIT: Добавление в ошибке Http Fox.

Это говорит NS_BINDING_ABORTED

и показывает это:

(Request-Line) POST/AJAX/UpVote ideaId = 1 HTTP/1.1 Хост локальный User-Agent Mozilla/5.0 (Windows NT 6.1, WOW64; rv: 21.0) Gecko/20100101 Firefox/21.0 Принять приложение/json, text/javascript, /; д = 0,01 Accept-Language EN-US, ан; д = 0,5 Accept-Encoding GZIP, выкачать X-Requested-С XMLHttpRequest Referer локальный Cookie __utma = 111872281.1986143499.1358265304.1358511066.1358786646.8; __utmz = 111872281.1358265304.1.1.utmcsr = (прямой) | utmccn = (прямой) | utmcmd = (нет); ASP.NET_SessionId = natvmbqvjfnm11deiek1hngi; ,ASPXAUTH = 4C0D282B36C410B3FA8271342C22B0A4435D35CD8F2BFE5B58E3F2A643993963F56D3F410A4E586FC44DC68B5737F9E7EEC18FB32E629014DECAA43B818DC49358E618CA73815EB1BBF977CE04342146B7F5EA30BB7D0D2328FC3B75F1C4CA65

И в содержании он говорит: Ошибка при загрузке контента (NS_ERROR_DOCUMENT_NOT_CACHED)

+0

Извините, но что такое «бессмысленная» ошибка? Вы пробовали смотреть трафик в Fiddler? –

+0

вместо предупреждения вы можете использовать Console.log, чтобы вы могли указать статус и другие переменные. – mlwacosmos

+0

Я включил сообщение HttpFox, если это какая-то помощь? –

ответ

0

Первое, что я хотел бы попробовать меняется вы запрашиваете от POST к GET и:

return Json(model);

-

return Json(model, JsonRequestBehavior.AllowGet);

+0

Привет. Спасибо за ваш ответ. К сожалению, это дало ту же ошибку. –

+0

@LexEichner теперь вы можете увидеть, что отправляется в запросе GET, используя Firebug в сетевом меню. Вот что важно здесь. –

1
$.ajax({ 
     type: "POST", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     async: false, 
     timeout: 60000, 
     tryCount: 0, 
     retryLimit: 3, 
     success: function(data) { 
      alert("Success"); 
     }, 
     error: function (httpRequest, textStatus, errorThrown) { 
      alert(httpRequest + "Status = " + textStatus + ", error = " + errorThrown); 
     } 
    }); 

Вы должны указать тип содержимого, и если вы работаете с ФОС службы ваша служба должна быть, как это

[OperationContract] 
    [WebInvoke(Method = "GET",ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)] 

public virtual JsonResult UpVote(int ideaId) 
{ 
    IdeaGenEntities ctx = new IdeaGenEntities(); 

    var currentIdea = (from m in ctx.Ideas 
         where m.ID == ideaId 
         select m).Single(); 

    var model = new VoteModel(); 
    model.Initialize(currentIdea); 

    int currentVotes = model.Votes; 
    currentVotes += 1; 

    currentIdea.Votes = currentVotes; 
    ctx.SaveChanges(); 

    return Json(model); 

} 

И если вы используете веб-сервис код должен содержать следующий префикс

[WebMethod] 
[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public virtual JsonResult UpVote(int ideaId) 
    { 
     IdeaGenEntities ctx = new IdeaGenEntities(); 

     var currentIdea = (from m in ctx.Ideas 
          where m.ID == ideaId 
          select m).Single(); 

     var model = new VoteModel(); 
     model.Initialize(currentIdea); 

     int currentVotes = model.Votes; 
     currentVotes += 1; 

     currentIdea.Votes = currentVotes; 
     ctx.SaveChanges(); 

     return Json(model); 

    } 
+0

Привет. Спасибо за ответ. Добавление contentType к сожалению не помогает. И никаких веб-сервисов. –

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