2010-02-09 34 views
18

Tôi đang sử dụng jQuery.ajax để trích xuất dữ liệu biểu mẫu từ một trang và gửi dữ liệu đó đến cơ sở dữ liệu của tôi (thông qua một trang PHP khác).Thoát dữ liệu jQuery được gửi qua POST

Các thông tin mẫu được thu thập bởi:

var X=$('#div1').val(); 
var Y=$('#div2').val(); 

này được sử dụng để xây dựng chuỗi POST, ví dụ:

var data='varx='+X+'&vary='+Y; 

Rõ ràng đây là vấn đề nếu một nhân vật dấu và được sử dụng. Phương pháp nào tốt nhất để thoát khỏi các biến, đặc biệt để người dùng có thể sử dụng dấu và (&) một cách an toàn?

Cảm ơn!

Trả lời

24

Điều tốt nhất là sử dụng đối tượng cho dữ liệu.

jQuery.post("yourScript.php", { 
    varx: X, 
    vary: Y 
}); 

hoặc

jQuery.ajax({ 
     url: "yourScript.php",   
     type: "POST", 
     data: ({varx: X, vary: Y}), 
     dataType: "text", 
     success: function(msg){ 
     alert(msg); 
     } 
    } 
); 

Bạn cũng có thể sử dụng serialize jQuery() để lấy dữ liệu mẫu của bạn như là một chuỗi truy vấn serialized:

var data = jQuery(formSelector).serialize(); 

Các .serialize() phương pháp tạo ra một văn bản chuỗi trong mã hóa tiêu chuẩn được mã hóa URL chuẩn. Nó hoạt động trên một đối tượng jQuery đại diện cho một tập hợp các phần tử biểu mẫu . Các phần tử biểu mẫu có thể là một số loại.

Way đẹp theo ý kiến ​​của tôi :-)

+0

Cảm ơn bạn đã trả lời! – Matt

24

encodeURIComponent sẽ làm những gì bạn đang tìm kiếm.

var X = encodeURIComponent($('#div1').val()); 
var Y = encodeURIComponent($('#div2').val()); 

Điều này sẽ mã hóa tất cả các ký tự có thể không an toàn.

+0

Cảm ơn trả lời của bạn! – Matt

2

Bạn có thể sử dụng chức năng thoát JavaScript

var data='varx='+escape(X)+'&vary='+escape(Y); 
+1

Chức năng escape() không được chấp nhận trong phiên bản JavaScript 1.5. Sử dụng encodeURI() hoặc encodeURIComponent() để thay thế. – CoR

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