我正在使用以下脚本进行调用,该脚本在点击锚标记时被调用
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"
}
答案 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);
}