Я выполняю вызов, используя следующий скрипт, который вызывается по щелчку тега привязки.
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;
}
Когда Я получаю доступ к URL через браузер result =
{
"token":"c877453e-739d-4883-9310-91ddd707d6af"
}
Если ваш результат не был успешным, этот обратный вызов не сработает, обычно это происходит из-за того, что возвращается недопустимый 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/
Скорее всего, вы не вернете действительный 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);
}
});
Важно: Начиная с 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');
});
}
Что выводится выше? (Предполагается, что в вашем браузере есть консоль
.)
Вы вызываете preventDefault() или возвращаете false в обработчике щелчка якоря?