2010-04-26 78 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); 
     }