2012-03-05 37 views
8

Tôi đang xây dựng một trang web hướng ajax và tất cả các liên kết của tôi làm việc như thế này:liên kết ajax mở trong tab mới

<div class="link">press me </div> 

<div id="contents" ></div> 
<script> 
    $('div[class="link"]').click(function() { 
     $.ajax({          
      url: 'contents/get_products.php', 
      type: "GET",   
      data: 
      dataType: 'json',    
      success: 
       function(data){ 
        $.each(data, function(i){ 
         $('#contents').append('<div class="cat_list_item">something</div>'); 
        }); 
      } 
     }); 
    }); 
</script> 

Làm thế nào để làm cho các liên kết mở trong tab mới (trên nhấp chuột giữa hoặc trên "liên kết mở trong tab mới "trên nhấp chuột phải).

Tôi biết rằng trình duyệt vừa mở trang gốc (url) mà không lấy dữ liệu từ cuộc gọi Ajax, nhưng làm cách nào tôi có thể tải dữ liệu trong tab mới. Tôi đã tìm kiếm trên Internet và bây giờ tôi đã không tìm thấy một giải pháp.

Trả lời

3

Không, ít nhất là sử dụng cách tiếp cận của bạn làm điều đó là khó có thể. Nếu bạn muốn sử dụng chức năng tab mới được cung cấp nguyên bản bởi trình duyệt, bạn không thể sử dụng div s với trình xử lý Javascript được đính kèm với chúng cho các liên kết của bạn.

Những việc bạn có thể làm: sử dụng window.open với _blank làm mục tiêu, nhưng bạn sẽ gặp sự cố với trình chặn cửa sổ bật lên và điều đó có thể không phải là điều bạn muốn. Bạn cũng có thể sử dụng <a class="link" href="my-ajax-view/?some=parameters">press me</a> và viết một trang hiển thị nội dung bạn đang tìm kiếm (có vẻ như giải pháp tốt nhất cho tôi, vì sau đó bạn cũng sẽ cung cấp chức năng cho 5% người dùng đã tắt Javascript) . Bạn vẫn có thể thực hiện một số thao tác tải AJAX ưa thích bằng JQuery khi nhấp vào liên kết đó, nhưng nếu ai đó mở liên kết trong một tab mới, bạn sẽ chuyển hướng đến trang thu thập thông tin. handler nhấp chuột mới của bạn sau đó sẽ trông như thế này:

$('a.link').click(function(event) { 
    event.preventDefault(); 
    // Your ajax request here 
} 
1

Bạn luôn có thể tự động tạo ra một trang html với mã php của bạn và gửi lại địa chỉ để nó và như đã đề cập target = "_ blank" nó trên một lệnh window.open từ javascript.

Ngoài ra, sẽ sử dụng giao diện người dùng jQuery để tạo tab mới với dữ liệu kết quả thực hiện công việc?

3

Điều này trái với khái niệm AJAX, dự định loại bỏ yêu cầu đó đối với dữ liệu riêng lẻ, điều này sẽ làm cho trang hiện tại cập nhật. Yêu cầu dữ liệu để tạo một tab mới với các ngắt ngoài khái niệm này, yêu cầu bạn thực hiện yêu cầu thứ hai để thực sự nhận được tab được hiển thị.

Hoặc chọn cho:

  1. Các dữ liệu sẽ được hiển thị trong tab hiện tại sử dụng AJAX, ...

  2. HOẶC làm không AJAX ở tất cả và chỉ mở ra một tab mới mà yêu cầu dữ liệu.

Đừng trộn hai thứ này vì nó không có ý nghĩa gì cả.

1

Tôi đã đấu tranh với cùng một vấn đề và tôi đã tìm thấy giải pháp rất đơn giản. Nó chỉ về cơ bản kiểm tra mã AJAX với điều kiện đơn giản như thế này:

if (event.which !== 2) { 
    // ajax code 
} 

Bằng cách này bạn đang gọi điện thoại AJAX chỉ khi bạn không bấm nút chuột giữa, nếu bạn làm điều đó vẫn hành xử như liên kết bình thường, vì vậy nó mở trang trong tab mới.

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