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