2011-11-16 49 views
11

Tôi có một ứng dụng đường ray và tôi tiếp tục nhận được một hành vi kỳ lạ với yêu cầu pjax. Khi tôi nhìn vào nhật ký phát triển của mình, tôi có thể thấy rằng hai yêu cầu đang được thực hiện. Yêu cầu đầu tiên là pjax và tiếp theo là không. Kết quả là trang vẫn tải lại.yêu cầu jquery pjax gửi hai lần

Tôi đánh giá cao nếu có ai có thể giúp tôi với điều này.

+2

Chúng tôi cần xem giải thích chi tiết hơn về câu hỏi của bạn. Vui lòng đăng một số mã, tệp nhật ký hoặc các nội dung khác có liên quan. – Bojangles

+0

Tôi đang gặp sự cố tương tự. Tôi có một ví dụ có sẵn [ở đây trên cloudfoundry] (http://scaffolding.cloudfoundry.com/book/list). Các liên kết phân loại và sắp xếp bảng phải là pjax nhưng sử dụng firebug bạn có thể quan sát chúng tạo ra một yêu cầu XHR theo sau là toàn bộ trang làm mới. Mã nguồn cho ứng dụng đang chạy có [ở đây trên GitHub] (https://github.com/robfletcher/grails-enhanced-scaffolding/tree/pjax) tệp có liên quan có thể là 'grails.list.js' –

+1

Với Firebug Tôi đã thiết lập rằng trong trường hợp xử lý thành công mặc định của pjax của tôi là không tìm thấy bất kỳ nội dung nào bằng cách sử dụng bộ chọn phân đoạn mà tôi đã cho nó. Nhìn vào [mã pjax] (https://github.com/defunkt/jquery-pjax/blob/master/jquery.pjax.js#L106) trong trường hợp đó, nó sẽ thực hiện làm mới toàn bộ trang. Tôi không rõ tại sao bộ chọn không hoạt động vì phản hồi AJAX có vẻ ổn và bộ chọn là hợp lệ. –

Trả lời

14

Plugin pjax JQuery có trình xử lý lỗi mặc định, sẽ chỉ tải lại trang đích. Trình xử lý lỗi này được gọi khi hết thời gian chờ, mà pjax đặt rất thấp. Do đó, nếu yêu cầu của bạn mất quá nhiều thời gian, bạn sẽ thấy hai yêu cầu giống hệt nhau. Yêu cầu pjax (có thể với thuộc tính _pjax), tiếp theo là một yêu cầu không phải pjax khác. Trong trình duyệt, bạn có thể sẽ thấy toàn bộ trang tải lại.

Một điều tôi tìm thấy trong tình huống của mình, đó là bản thân phản ứng không mất nhiều thời gian. Tuy nhiên, HTML đã được trả lại bao gồm một nhúng flash. Tôi không chắc chắn nếu mã pjax được phản ứng của nó trước hoặc sau khi nhúng flash được tải.

Để giải quyết vấn đề, tôi đã thay đổi mã PJax tôi để trông giống như ...

$.pjax({ 
     url: xhr.getResponseHeader('Location'), 
     container: '#container', 
     timeout: 4000 // pick a suitable timeout 
     }); 

Tất nhiên, điều này được gọi pjax trực tiếp. Nếu bạn không gọi trực tiếp, bạn sẽ phải tìm một giải pháp tương tự.

+0

Đã cứu mạng tôi! :) Nó đã không gửi hai yêu cầu, nhưng chỉ đơn giản là hủy bỏ đầu tiên và sau đó tải lại .. Anyways - hoạt động hoàn hảo! –

1

Tôi cũng đã gặp sự cố này - có vẻ như đây là sự cố liên quan đến bộ nhớ đệm của trình duyệt. Tôi đã nhận thấy rằng nếu tôi xóa lịch sử và bộ nhớ cache, nó sẽ ngừng xuất hiện trong Chrome. Tôi đã không thể giải quyết nó được nêu ra nhưng tôi tưởng tượng nó có cái gì để làm với việc vô hiệu hóa bộ nhớ đệm trình duyệt?

+1

Hóa ra vấn đề của tôi là yêu cầu đã hết thời gian. Thời gian chờ vượt qua: 2000 trong hàm pjax đã sửa nó cho tôi. Tôi cũng tìm thấy có một thùng chứa pjax rỗng trong một phần của bố cục của tôi. Khi tôi điều hướng đến đoạn đó, nó đã cho tôi một lỗi trong bảng điều khiển trình duyệt. Tôi đã có thể sửa chữa nó bằng cách đặt một yếu tố khoảng trống trong đó. – andrewajo

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