2015-06-05 23 views
11

Tôi muốn tìm nạp giá trị trả về JavaScript trong ViewController của mình,Nhận giá trị trả lại từ JavaScript trong UIWebView

Vấn đề là, nếu có một lượng nhỏ dữ liệu như Chuỗi, tôi sẽ nhận được.

Nhưng nếu có dữ liệu lớn như đối tượng JSON, Nó hiển thị không.

Khi tôi gọi cùng một hàm JS trong Safari> Phát triển> Trình mô phỏng iOS, nó cho đối tượng JSON sau 1-2 giây.

Đây là mã của tôi:

var value = IBwebView.stringByEvaluatingJavaScriptFromString("get_small_string()") 
println(value) //Printing value 

nhưng điều này in bằng không,

var value = IBwebView.stringByEvaluatingJavaScriptFromString("get_JSON()") 
println(value) //Printing nil 

có ai biết làm thế nào tôi có thể lấy kích thước JS giá trị trả về lớn trong đối tượng iOS?

+2

Các bạn đã thử thêm 'như? NSDictionary'? –

+0

có, nó cũng cho nil –

+0

Không thể sử dụng các lớp NSURL để tìm nạp JSON? Nếu không, bạn đang ở lòng thương xót của tốc độ kết nối và thời gian phản hồi của máy chủ. Suy nghĩ khác duy nhất của tôi là liệu bạn có thể sử dụng JSVirtualMachine, giống như tôi đã làm trong [Playground] này (https://github.com/sketchytech/Swiftography), nơi tất cả JS là cục bộ. – sketchyTech

Trả lời

5

này giải quyết vấn đề của tôi,

var value = IBwebView.stringByEvaluatingJavaScriptFromString("get_JSON()") 

var err:NSError? 
var obj:AnyObject? = NSJSONSerialization.JSONObjectWithData(value!.dataUsingEncoding(NSUTF8StringEncoding)!, options:nil, error:&err) 

if let items = obj as? NSDictionary { 
var data1:String = items.objectForKey("data1") as? String 
var data2:String = items.objectForKey("data2") as? String 
var data3:String = items.objectForKey("data3") as? String 
} 
1

Nếu phương thức tập lệnh java của bạn "get_JSON()" trả lại hơn 10 MB dữ liệu thì nó không được phép theo phương thức stringByEvaluatingJavaScriptFromString.

Hoặc Nếu mất hơn 10 giây để xử lý đầu ra, trong trường hợp đó, bạn sẽ nhận được giá trị nil dưới dạng đầu ra.

+0

chỉ có dữ liệu văn bản, vì vậy rõ ràng ít hơn 1MB, Mất 1-2 giây trong Safari> Phát triển> Trình mô phỏng iOS, như tôi đã đề cập. –

+0

Bạn gọi phương pháp này ở đâu? –

+0

Tôi gọi phương thức này trên IBAction của một nút, tôi nhấn nút sau khi tải xong trang. –

4

Ngay sau khi bạn sẽ trả về một đối tượng nó sẽ không làm việc, những gì bạn có thể thử thay vào đó là để trả về một phiên bản chuyển đổi thành chuỗi các đối tượng của bạn

JSON.stringify(yourObject); 

Và phân tích chuỗi này ở phía bên mẹ đẻ.

+0

Cảm ơn nó đã hoạt động. Tôi đã cố gắng tìm nạp đối tượng được phân tích cú pháp và nó không hoạt động. – ArunGJ

Các vấn đề liên quan