2010-04-26 41 views
8

Tôi đang thực hiện cuộc gọi bằng cách sử dụng kịch bản sau đây được gọi là trên nhấp chuột của một thẻ neogetJSON callback không bắn

function GetToken(videoId) { 
     debugger; 
     var json = $.getJSON("/Vod/RequestAccessToken/"+videoId, function(result){ 
      alert("token recieved: " + result.token); 
     }); 
    } 

Trong ứng dụng máy chủ tôi nhận được cuộc gọi vì vậy tôi biết nó là một URL hợp lệ, nhưng gọi lại không được gọi. Nếu tôi đặt mặc dù mã jquery (f11/f10) gọi lại được gọi là ?? !!!?

server trả về kết quả từ ứng dụng MVC trong các hình thức của một lớp

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

Khi tôi truy cập vào url qua kết quả trình duyệt =

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

Trả lời

3

Một cược khả năng là bạn không trở về giá trị JSON. Các tài liệu jQuery lưu ý rằng, "Như của jQuery 1.4, nếu tệp JSON có lỗi cú pháp, yêu cầu thường sẽ không âm thầm". Văn bản JSON bạn đang phân phối có vượt qua JSON Lint không? Bạn cũng có thể muốn chuyển (ít nhất là tạm thời) thành jQuery.ajax. Nó cho phép xử lý lỗi nhiều hơn. Một cái gì đó như:

$.ajax({ 
    url: "/Vod/RequestAccessToken/"+videoId, 
    dataType: 'json', 
    error: function(xhr, textStatus, errorThrown){ 

     }, 
    success: function(result){ 
      alert("token recieved: " + result.token); 
     } 
}); 
+1

Có một dấu phẩy mất tích '' sau khi gọi lại báo lỗi. – Ralphleon

+1

http://www.jsoneditoronline.org/ có thể là công cụ trực tuyến hữu ích trong các lỗi phát hiện. Chỉ cần dán json ở bên trái. –

2

Từ jQuery documentation:

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

Vì vậy, là JSON của bạn hợp lệ?

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

Đầu ra ở trên là gì? (Giả sử trình duyệt của bạn có console.)

21

Nếu kết quả của bạn không thành công, cuộc gọi lại đó sẽ không kích hoạt, điều này thường do trả lại JSON không hợp lệ. Để cung cấp cho nó một thử nghiệm, bạn có thể sử dụng các hình thức dài $.getJSON, như thế này, do đó bạn có thể thấy lỗi:

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

Nếu nó là một lỗi JSON/phân tích cú pháp, bạn có thể trả lời của bạn và xem những gì xảy ra với JSONLint, tại đây: http://www.jsonlint.com/

+0

Không có lỗi trình phân tích cú pháp JSON –

+0

@Marty - Lỗi nào * bạn nhận được ... nó có lý do, luôn đăng nó. –

+0

Tôi không gặp lỗi. Nó không âm thầm. Kết quả json = {"mã thông báo": "c877453e-739d-4883-9310-91ddd707d6af"} –

0

Bạn có đang gọi preventDefault() hoặc trả về false trong trình xử lý nhấp chuột của neo không?

0

Bạn cần để ra hiệu cho phép JSONGets trong hành động điều khiển của bạn khi gọi phương thức serialization Json:

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