2011-10-03 52 views
5

Tôi đang làm việc trên một dự án mà tôi đã phát triển một trang web cho một travelagency. Mọi thứ đang trở nên tốt hơn và nhiều lưu lượng truy cập hơn đang được tạo ra. Vấn đề nằm ở pricetables tạo chậm. Tôi và khách hàng của tôi đã tìm ra, vì các quỹ có sẵn, memcache nên làm các thủ thuật. Thoát như tôi đã bắt đầu tôi đã viết lại ajax-code cũ bằng mã jQuery ajax mới. Một số bài viết khác từ tối nay là một chút bao gồm chủ đề này.Trong khi gửi dữ liệu bằng ajax, dữ liệu bị mất

Bây giờ tôi có đoạn mã sau đó cho thấy một pricetable trong một tháng nhất định:

function ShowPriceTable(targetElement, accommodationID, month) 
{ 
    $.ajax({ 
     type: "POST", 
     url: basePath + "/ajax/GetPriceTable.php", 
     data: "accommodationID="+accommodationID+"&month="+month, 
     success: function(data){ 
      $("#"+targetElement).html(data); 

      $.ajax({ 
       type: "POST", 
       url: basePath + "/ajax/WriteCache.php", 
       data: "accommodationID="+accommodationID+"&month="+month+"&data="+data, 
      }); 
     } 
    });   
} 

GetPriceTable.php là một tập tin lớn, thực hiện nhiều truy vấn và rất nhiều pricecalculation được thực hiện ở đó. Tất cả kết quả trong một bảng HTML với giá cả. Đầu ra đó, được lưu trữ trong data được tiêm vào thuộc tính innerHTML của div, trong trường hợp này là targetElement bởi vì nó phải được điều chỉnh.

Tôi đã tìm ra, vâng .. khi tôi có kết quả chính xác trong data Tôi vừa thực hiện một cuộc gọi khác tới số WriteCache.php với dữ liệu. Dữ liệu sau đó được lưu trữ trong máy chủ memcache bởi $cache->set("my_key", $_POST["data"]); (tiêu đề được sử dụng và đặt trước đây để đảm bảo lượt truy cập 'mới' cho trình duyệt).

Bây giờ đến phần khó khăn ... không có vấn đề gì tôi cố gắng, tôi chỉ nhận được chính xác 4067 ký tự trong bộ nhớ cache của tôi. Tôi đã hết các lựa chọn mà tôi có thể nghĩ đến. Đây chỉ là một phần nhỏ trong tổng sản lượng ... Bổ sung, một số alert của data.length chỉ cho tôi nơi có thể tìm thấy chỗ ở mà tôi đang tìm kiếm, chiều dài là 98.858.

Bạn có đề xuất gì có thể gây ra hành vi kỳ lạ này không? Nó có thể được các dữ liệu được thông qua từng chút một? Memcache có một tùy chọn chunk_size, theo mặc định nó được đặt thành 8192 (byte tôi đoán ?, documentation doen't nói ..)

Bất kỳ trợ giúp nào được đánh giá cao!

Chúc mừng!

P.s. thẻ memcached phải là memcache nhưng tôi không thể chọn tùy chọn đó ..

Cập nhật Vấn đề không liên quan đến memcache. Đối với một số lý do dữ liệu của tôi nhận được thay đổi trong khi nó đang được gửi một lần nữa. Kết quả này thành HTML không hợp lệ, vì lý do nào đó, không được đặt vào bộ nhớ cache và không được hiển thị trong đầu ra của tôi (thư cho chính tôi) nhưng khi tôi xuất kết quả (sử dụng thành công: trong cuộc gọi thứ hai) sang một DIV khác, tôi thấy đầu ra 'xoài' ...

+0

Một đồng nghiệp có vấn đề tương tự hồi đầu tháng trước, anh ta đang cố gắng gửi hơn 1mb dữ liệu tới máy chủ qua một bài $ .ajax và nó vẫn không thành công. Ông đã phải tải lên trong khối ít hơn 1 triệu byte hoặc nó sẽ sụp đổ và không gửi. Có lẽ lỗi của bạn nằm ở một nơi tương tự? –

+0

Bất kỳ suy nghĩ nào về cách triển khai giải pháp như vậy? – Ben

+0

Chỉ cần đoán nhưng hãy thử 'dữ liệu: "chỗ ởID =" + chỗ ởID + "& tháng =" + tháng + "& dữ liệu =" + data.serialize(), ' – alykhalid

Trả lời

1

Tôi đã tìm ra nó, nó đã cho tôi tất cả các buổi tối mặc dù ... Sản lượng của tôi có chứa các thực thể HTML. Và bạn đã đoán nó. Các đối tượng HTML bắt đầu bằng ký hiệu và cùng một lúc là ký tự delimeter cho dữ liệu được truy xuất bởi $_GET, $_POST hoặc $_REQUEST. Một đơn giản escape(data) đã làm các trick. Cảm ơn tất cả những người đã dành thời gian để digg vào điều này!

0

Bạn có thể thử đặt MEMCACHE_COMPRESSED bằng php.ini hoặc chuyển nó làm cờ trong hàm đặt a la Memcache::set($key, $var, MEMCACHE_COMPRESSED); để nén giá trị.

+0

Cảm ơn bạn đã trả lời. Sau khi thử nhiều thứ tôi đã kết luận, 'dữ liệu' được thay đổi vì một lý do nào đó. Vì vậy, không có vấn đề gì tôi đang cố gắng để thiết lập, kết quả là loại bị hỏng .. – Ben

+0

Xin lỗi để nghe nó. Chúc may mắn. –

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