2013-08-14 35 views
14

Tôi đang cố gắng tạo ứng dụng Samsung Smart TV với node.js.Cách sử dụng jsonp với node.js express

Trong dự án của tôi, tôi muốn làm cho ứng dụng của tôi giao tiếp với máy chủ pc.

Theo nhiều trang web, tôi có thể thực hiện việc này bằng "jsonp".

Đây là mã phía máy khách mà tôi đã tìm thấy.

<html> 
<head> 
    <title>jsonp test</title> 
    <script src="http://code.jquery.com/jquery-1.6.2.min.js"></script>  
    <script type="text/javascript"> 
     $(function(){    
      $('#select_link').click(function(e){ 
       e.preventDefault(); 
       console.log('select_link clicked'); 

       function test(data){ 
        return {"message":"ok"}; 
       } 

       $.ajax({ 
        dataType: 'jsonp', 
        data: "data=yeah",      
        jsonp: 'callback', 
        url: 'http://172.20.10.3:3000/endpoint?callback=?',      
        success: function(data) { 
         console.log('success'); 
         console.log(JSON.stringify(data)); 
        } 
       }); 
      });    
     }); 
    </script> 
</head> 
<body> 
    <div id="select_div"><a href="#" id="select_link">Test</a></div>  
</body> 

Và, đây là một mã phía máy chủ mà tôi tìm thấy.

Các mã này đang hoạt động trên máy tính của tôi (máy chủ), nhưng khi tôi mở trang khách hàng trên máy tính khác, nó không hoạt động.

Bảng điều khiển chỉ cho tôi log này:

X GET http://172.30.2.2:3000/endpoint?callback=jQuery11020685203080996871_1376482492523&data=yeah&_=1376482492524 

Tôi muốn sử dụng jsonp để xử lý cross-domain, nhưng nó không hoạt động tôi nghĩ rằng ...

gì tôi có thể làm gì để sửa chữa điều này?

Xin hãy giúp tôi !!

+1

Bạn có chắc chắn rằng máy tính của người khác có thể liên lạc với bạn (trên cùng một mạng, có thể ping, v.v.) không? – arghbleargh

+0

@arghbleargh Cảm ơn bạn đã bình luận !! và tôi đã kiểm tra ... những người khác có thể liên lạc với máy chủ của tôi ... – newbeeep

+0

Thử nhìn vào thanh tra mạng và xem yêu cầu và phản hồi là gì. – arghbleargh

Trả lời

36

chỉ cần sử dụng

res.jsonp(obj) 

bạn có thể đi ExpressJS JSONP để biết thêm

+0

thể hiện là có thể thực hiện điều này thông qua $ .getJSON và recv một json phản hồi trên cùng một trang? Làm điều này bằng cách sử dụng response.jsonp làm cho kết quả trong một trang mới – user2290820

+0

Nó không phải là rõ ràng những gì bạn đang cố gắng làm. Bạn có thể vui lòng đăng câu hỏi dưới dạng câu hỏi với chi tiết @ user2290820 –

+0

đây là câu hỏi: https://stackoverflow.com/questions/31891606/receive-ajax-post-back-on-client-from-express-without-reload – user2290820

5

Cố gắng thay thế

res.send(req.query.callback + '('+ JSON.stringify(obj) + ');');

với

res.jsonp(req.query.callback + '('+ JSON.stringify(obj) + ');'); 
+7

Tôi không nghĩ rằng bạn cần phải xâu chuỗi đối tượng và quấn nó với hàm gọi lại nếu bạn sử dụng res.jsonp() – rob

+1

Điều này không an toàn vì bạn có thể thực hiện việc chèn Script thông qua tham số URL 'callback'. bạn cần phải thoát khỏi giá trị tham số gọi lại đầu tiên bằng cách sử dụng js-string-escape: https://www.npmjs.com/package/js-string-escape – Nivco