getJSON回调没有触发

Mar*_*uth 8 c# asp.net ajax jquery json

我正在使用以下脚本进行调用,该脚本在单击锚标记时调用

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

在服务器应用程序中,我接收到调用,因此我知道它是一个有效的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;
}
Run Code Online (Sandbox Code Playgroud)

当我通过浏览器result =访问url时

{
  "token":"c877453e-739d-4883-9310-91ddd707d6af"
}
Run Code Online (Sandbox Code Playgroud)

Nic*_*ver 21

如果结果不成功,则不会触发该回调,这通常是由于返回了无效的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);
  }
});
Run Code Online (Sandbox Code Playgroud)

如果它是JSON /解析器错误,您可以采取您的响应,看看JSONLint有什么问题,请访问:http://www.jsonlint.com/


Mat*_*hen 3

可能的赌注是您没有返回有效的 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);
        }
});
Run Code Online (Sandbox Code Playgroud)