2010-04-26 76 views
8

我用下面的脚本被称为一个锚标记的getJSON回调不点火

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 =

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

回答

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

有缺少逗号“”错误后的回调。 – Ralphleon 2010-08-29 03:51:57

+1

http://www.jsoneditoronline.org/可以作为发现错误的在线工具。只需将json粘贴在左侧即可。 – 2013-11-06 05:55:01

2

从jQuery的documentation

Important: As of jQuery 1.4, if the JSON file contains a syntax error, the request will usually fail silently.

那么,你的JSON有效?

function GetToken(videoId) { 
    debugger; 
    console.log('getting it'); 
    var json = $.get("/Vod/RequestAccessToken/"+videoId, function(result){ 
     console.log('got it'); 
    }); 
} 

上面的输出是什么? (假设你的浏览器有console。)

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/

+0

没有JSON解析器错误 – 2010-04-26 20:31:17

+0

@Marty - 你得到了什么样的错误......它是有原因的,总是发布它。 – 2010-04-26 20:32:23

+0

我没有收到错误。它无声无息地失败。 json result = {“token”:“c877453e-739d-4883-9310-91ddd707d6af”} – 2010-04-26 20:37:46

0

你是否调用了preventDefault()或者在锚的点击处理函数中返回false?

0

您需要调用的信号序列化Json的方法时,允许JSONGets在你的控制器动作:

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