2012-07-13 29 views
6

Tôi có một chức năng mã trạng thái jquery ajax để xử lý một 404 ... một câu trả lời chồng tràn khác nói rằng trong phương thức thành công, this.url cung cấp url cho yêu cầu ... tuy nhiên, điều này dường như không phải là trường hợp cho trình xử lý statusCode của tôi. Ý tưởng nào? Không có gì tôi có thể thấy trong tài liệu về cách nhận url cho yêu cầu.Trạng thái JQueryMode 404 - cách nhận url jqXhr?

đối tượng tùy chọn ajax của tôi trông gần như thế này (có thể đã bỏ lỡ ra một cú đúp khi cắt tỉa ra mã không liên quan đến câu hỏi này)

;(function($) { 
    var defaultSettings = { 
    // ... other plugin specific settings 
    ajaxOptions: 
    { 
        cache:false, 
        context:$(this), 
        statusCode: { 
         404:function(xhr) { 

         // this line... this.url is always undefined (so is xhr.url) 
          $('#body').append('<div class="errordisplay">Content not found' + (this.url?': ' + this.url:'') + '</div>'); 

        // ... do other stuff 

          return false; 

         } 
        } 
      } 
} 
+0

Bạn có truyền một điều gì đó trong tùy chọn 'context' tới' $ .ajax() 'không? –

+2

['this.url' sẽ hoạt động] (http://jsfiddle.net/jamesallardice/f3XTn/). Bạn có thể cần đăng thêm mã của mình. –

+0

đối tượng ajaxOption này là tùy chọn mặc định cho plugin jquery tùy chỉnh, vì vậy tôi có "context: $ (this)" ... mã câu hỏi được cập nhật chi tiết hơn – Nathan

Trả lời

8

Bối cảnh mặc định cho xử lý sự kiện AJAX (tức là đối tượng bị ràng buộc để this trong xử lý) thực sự phơi bày một tài sản url bởi vì nó là một sự pha trộn giữa $.ajaxSettings và các đối số được chuyển đến $.ajax().

Tuy nhiên, trong trường hợp của bạn, bạn sẽ ghi đè ngữ cảnh mặc định đó bằng cách chuyển $(this) trong tùy chọn context. Hơn nữa, làm điều đó trong ajaxOptions có nghĩa là nó sẽ không được dễ dàng để mở rộng đối tượng đó với URL hiện tại.

Tôi khuyên bạn nên liên kết URL với phần tử mà plugin của bạn đang tăng cường trước cuộc gọi AJAX, sử dụng data() hoặc tương tự.

30

Bạn có thể thay đổi theo yêu cầu & thiết lập các đối tượng trước khi gửi với mã sau:

$.ajaxSetup({ 
    beforeSend: function(jqXHR, settings) { 
     jqXHR.url = settings.url; 
    } 
}); 

Sau đó truy cập vào xhr.url trong statusCode gọi lại. Nó sẽ hoạt động.

+0

Làm việc cho tôi và cho phép đăng nhập url cho mục đích gỡ lỗi. –

+0

Và nếu nó chuyển hướng trong quá trình? – Elaman

+0

@Elaman Trình duyệt xử lý chuyển hướng một cách minh bạch, vì vậy trình duyệt sẽ hoạt động đối với các phản hồi 301/302. – janlay

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