2011-03-15 34 views

Trả lời

13

Đây là một câu hỏi rộng.

Nếu bạn có nghĩa là, làm thế nào để bạn thực hiện một yêu cầu máy chủ và có nó tự động xử lý như JSON trên đường trở lại, bạn muốn làm điều gì đó như thế này:

dojo.xhrGet({ 
    url: "your/server/endpoint/here", 
    handleAs: "json", 
    load: function(obj) { 
     /* here, obj will already be a JS object deserialized from the JSON response */ 
    }, 
    error: function(err) { 
     /* this will execute if the response couldn't be converted to a JS object, 
      or if the request was unsuccessful altogether. */ 
    } 
}); 

Note handleAs: "json" ở trên, mà nói dojo.xhrGet (hoặc xhrPost, v.v.) để cố gắng chuyển đổi phản hồi thành đối tượng JS trước khi kích hoạt gọi lại load.

http://dojotoolkit.org/reference-guide/dojo/xhrGet.html

riêng, nếu bạn đã có cho mình một chuỗi JSON và chỉ cần chuyển nó sang một đối tượng JS, Dojo có dojo.fromJson(str) cho điều này (và dojo.toJson(obj) cho một hướng khác).

+0

+1 Một câu trả lời rất kỹ lưỡng. –

1

Với võ đường 1.8: Thêm Module ID "võ đường/yêu cầu/XHR" để phụ thuộc và XHR của bạn như là đối số gọi lại, sau đó:

xhr("path/to/file.json", { 
     handleAs: "json" 
    }).then(function(obj){ 
     // do something with the obj    
    }, function(err){ 
     // Handle the error condition 

    }, function(evt){ 
     // Handle a progress event from the request if the 
     // browser supports XHR2 

    }); 
21

Trong Dojo 1.8+, để tải một tập tin JSON (không như XHR), sử dụng dojo/text để tải tệp, sau đó dojo/json để phân tích cú pháp. Giống như vậy:

require([ 'dojo/json', 'dojo/text!/path/to/data.json' ], 
    function(JSON, data) 
{ 
    var data = JSON.parse(data); 
}); 

Không phải là "!" sau dojo/text, được sử dụng để chỉ định tệp cần tải.

+0

Bạn không đóng yêu cầu. Bạn cần phải thêm ");" vào cuối mã của bạn. – Laurence

+0

Đã sửa lỗi! Cảm ơn, Laurence. – voidstate

+0

Làm cách nào để thêm đường dẫn ngữ cảnh của tôi vào 'dojo/text! /path/to/data.json' khi tôi cung cấp tên tệp theo yêu cầu? Một cái gì đó như thế này: location.pathname.replace (/ \/[^ /] * $ /, ''). – coder247

0

Bạn có thể tận dụng võ đường mô-đun/yêu cầu:

<script> 
    require(["dojo/request", function(request){ 
     request("patho/to/file.json" , {handleAs :"json"}).then(function(result){/*success*/} , function(err){/*Oops!*/}) 

    }); 
</script> 
Các vấn đề liên quan