getJSON回调没有触发

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

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

在服务器应用程序中,我收到调用,因此我知道它是一个有效的URL,但没有调用回调。 如果我通过jquery代码(f11 / f10)设置回调被调用?? !!!?

服务器以类的forms从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; } 

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

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

如果结果不成功,则不会触发该回调,这通常是由于返回了无效的JSON。 要给它一个测试,你可以使用长forms的$.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/

可能的赌注是你没有返回有效的JSON。 jQuery文档指出,“从jQuery 1.4开始,如果JSON文件包含语法错误,请求通常会无提示失败。” 您提供的JSON文本是否通过JSON Lint ? 您可能还想(至少暂时)切换到jQuery.ajax 。 它允许更多的error handling。 就像是:

 $.ajax({ url: "/Vod/RequestAccessToken/"+videoId, dataType: 'json', error: function(xhr, textStatus, errorThrown){ }, success: function(result){ alert("token recieved: " + result.token); } }); 

从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 。)

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

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

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