2012-06-09 44 views
34

Tôi có một BIGINT MySQL mà tôi đang lưu trữ trong dữ liệu HTML5. Sau đó, tôi đang cố gắng truy cập vào giá trị đó và chuyển nó qua một cuộc gọi AJAX.Vấn đề với dữ liệu jQuery() xử lý chuỗi là số

<div data-id="211285677671858177"> 

Và JavaScript:

var send_data = { 
    id: '' + $(this).data('id') 
} 
$.post('/send.php', send_data); 

Vấn đề là các jQuery data chức năng dường như để lấy giá trị đó là một dấu chấm động và không phải là một chuỗi. Vì vậy, việc thêm nó vào một chuỗi trống không giúp ích gì vì nó đã quá muộn - nó đã được làm tròn (trong trường hợp này là 211285677671858180). Tôi có thể làm gì để sữa nó?

Trả lời

58

Đây không phải là trường hợp "dài int" thực sự, số bạn nhận được là đại diện có sẵn gần nhất dưới dạng số dấu phẩy động.

Dù sao, bạn muốn giá trị dưới dạng chuỗi. Trích dẫn (tôi nhấn mạnh) jQuery docs for .data:

Mọi nỗ lực được thực hiện để chuyển đổi chuỗi thành một giá trị JavaScript (điều này bao gồm các phép toán luận, số, đối tượng, mảng, và null) khác nó là trái như một chuỗi. Để truy xuất thuộc tính của giá trị dưới dạng một chuỗi mà không có bất kỳ nỗ lực nào để chuyển đổi nó, hãy sử dụng phương thức attr().

+0

Được rồi, cảm ơn vì lời giải thích. Tôi ước có một cách để nói cho 'dữ liệu' không chuyển đổi nó nhưng tôi đoán' attr' sẽ làm ngay bây giờ – andrewtweber

+0

Tôi cũng thấy rằng sử dụng [HTMLElement.dataset] (https://developer.mozilla.org/en -US/docs/Web/API/HTMLElement/dataset) cũng khá đơn giản và nhanh chóng để triển khai. –

2

thử typecasting nó vào chuỗi:

id: '' + $(this).data('id').toString(); 
+1

Điều đó không hiệu quả, nó vẫn làm tròn tới 80 – andrewtweber

+1

@andrewtweber tổng số lần chụp trong bóng tối nhưng không sử dụng $ (this) .attr ('data-id'); giữ nó như một chuỗi? – TK123

+0

Có, điều đó không hoạt động. Thú vị ... Tôi tự hỏi nếu điều 'dữ liệu' là một lỗi thì sao? Tôi sẽ để lại câu hỏi mở một lúc để xem những gì người khác phải nói – andrewtweber

3

Không có những điều như một "số nguyên dài" trong JavaScript. Tất cả các số đều là điểm nổi 64 bit. Số của bạn không thể được biểu diễn chính xác trong đại diện điểm nổi IEEE-794.

Cách duy nhất để "sửa" điều này là làm cho số thành một chuỗi trong một miền có thể đối phó với các giá trị số nguyên lớn.

+1

OK. Bất kể, tôi không * muốn * nó là một con số. Tôi muốn nó được coi là một chuỗi, nhưng 'dữ liệu' dường như coi nó như một điểm nổi. Bất kỳ ý tưởng? – andrewtweber

+2

Tất cả các giá trị thuộc tính là các chuỗi.Tuy nhiên, jQuery cố gắng hữu ích và chuyển đổi mọi thứ thành kiểu số khi bạn sử dụng API '.data()'. Hãy thử chỉ nhận giá trị '.attr()' của thuộc tính. – Pointy

0

Hãy thử xung quanh giá trị thuộc tính dữ liệu trong dấu ngoặc đơn, nếu bạn muốn data để xử lý nó như một chuỗi. Vấn đề ở đó, tôi đoán, là bạn sẽ có dấu ngoặc kép.

0

Tôi gặp vấn đề tương tự khi id dữ liệu (chữ và số) được chuyển đổi thông qua việc sử dụng .data() do đó một vài ký tự cuối cùng đã được chuyển đổi thành tất cả các số 0. Phải mất một số nghiên cứu để xác định rằng đây là một lỗi trong việc triển khai jQuery của .data().

tham khảo: http://bugs.jquery.com/ticket/7579

Đối với tôi, để có được id dữ liệu trực tiếp như một công trình xung quanh, tôi đã sử dụng .attr ("data-id") trực tiếp và điều này đã cho tôi id chính xác.

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