getJSON回调没有触发

时间:2010-04-26 20:00:38

标签: c# jquery asp.net ajax json

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

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

当我通过浏览器结果=

访问网址时
{
  "token":"c877453e-739d-4883-9310-91ddd707d6af"
}

5 个答案:

答案 0 :(得分: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);
  }
});

如果是JSON /解析器错误,您可以在此处获取响应并查看JSONLint有什么问题:http://www.jsonlint.com/

答案 1 :(得分: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);
        }
});

答案 2 :(得分:2)

来自jQuery的documentation

  

重要提示:从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。)

答案 3 :(得分:0)

您是否在锚点击处理程序中调用preventDefault()或返回false?

答案 4 :(得分:0)

在调用Serialization Json方法时,您需要发出信号以允许控制器操作中的JSONGets:

 public JsonResult ActionDateClicked(ActionViewModel vm)
        {
            vm.Model.Observation = "Changed";
            return Json(vm, JsonRequestBehavior.AllowGet);
        }