обратный вызов getJSON не запускается - PullRequest
8 голосов
/ 27 апреля 2010

Я звоню, используя следующий скрипт, который вызывается по щелчку тега привязки

   function GetToken(videoId) {
        debugger;
        var json = $.getJSON("/Vod/RequestAccessToken/"+videoId, function(result){
            alert("token recieved: " + result.token);
        });
   }

В серверном приложении я получаю звонок, поэтому я знаю, что это действительный URL, но обратный вызов не вызывается. Если я установлю код jquery (f11 / f10), обратный вызов называется ?? !!!?

Сервер возвращает результаты из приложения MVC в виде класса

// function called
public JsonResult RequestAccessToken(int id)
{
    Token t = new Token();
    t.MasterId = Guid.NewGuid();
    var result = new TokenResult(t.MasterId);
    return this.Json(result, JsonRequestBehavior.AllowGet);
}

// class returned
public class TokenResult
{
    public TokenResult() { }
    public TokenResult(Guid g) { token = g.ToString(); }
    public string token = null;
}

Когда я получаю доступ к URL через браузер, результат =

{
  "token":"c877453e-739d-4883-9310-91ddd707d6af"
}

Ответы [ 5 ]

21 голосов
/ 27 апреля 2010

Если ваш результат неуспешен, обратный вызов не сработает, обычно это происходит из-за того, что возвращается неверный JSON. Чтобы проверить его, вы можете использовать длинную форму $.getJSON, например, так, чтобы вы могли увидеть ошибку:

$.ajax({
  url: url,
  dataType: 'json',
  success: function(result){
    alert("token recieved: " + result.token);
  },
  error: function(request, textStatus, errorThrown) {
    alert(textStatus);
  },
  complete: function(request, textStatus) { //for additional info
    alert(request.responseText);
    alert(textStatus);
  }
});

Если это ошибка JSON / парсера, вы можете взять свой ответ и посмотреть, что не так с JSONLint, здесь: http://www.jsonlint.com/

3 голосов
/ 27 апреля 2010

Скорее всего, вы не вернете действительный JSON. Документы jQuery отмечают, что: «Начиная с jQuery 1.4, если файл JSON содержит синтаксическую ошибку, запрос обычно завершается молча». Проходит ли текст JSON, который вы обслуживаете, JSON Lint ? Вы также можете переключиться (хотя бы временно) на jQuery.ajax . Это позволяет больше обработки ошибок. Что-то вроде:

$.ajax({
  url: "/Vod/RequestAccessToken/"+videoId,
  dataType: 'json',
  error: function(xhr, textStatus, errorThrown){

        },
  success: function(result){
            alert("token recieved: " + result.token);
        }
});
2 голосов
/ 27 апреля 2010

Из документации jQuery :

Важное замечание: Начиная с jQuery 1.4, если файл JSON содержит синтаксическую ошибку, запрос обычно завершается молча.

Итак, ваш JSON действителен?

function GetToken(videoId) {
    debugger;
    console.log('getting it');
    var json = $.get("/Vod/RequestAccessToken/"+videoId, function(result){
        console.log('got it');
    });
}

Что выводит выше? (Предполагая, что ваш браузер имеет console.)

0 голосов
/ 16 июля 2013

При вызове метода JSON сериализации вы должны указать, чтобы разрешить использование JSONGets в действии вашего контроллера:

 public JsonResult ActionDateClicked(ActionViewModel vm)
        {
            vm.Model.Observation = "Changed";
            return Json(vm, JsonRequestBehavior.AllowGet);
        }
0 голосов
/ 29 августа 2010

Вы вызываете protectDefault () или возвращаете false в обработчике щелчков якоря?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...