2012-03-05 2 views
8

Я строю АЯКС ориентированного сайт и все мои ссылки работают так:Открывать ссылки Аякса в новой вкладке

<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> 

Как сделать эти ссылки открываются в новой вкладке (на средней кнопке мыши или на «открытой ссылке в новой вкладке "по правому клику).

Я знаю, что браузер просто открывает исходную страницу (url) без данных, полученных из вызова Ajax, но как я могу заставить их загружать данные на новую вкладку. Я смотрю по Интернету, и теперь я не нашел решения.

ответ

3

Нет, по крайней мере, используя ваш подход, это вряд ли возможно. Если вы хотите использовать новую функциональность вкладки, предоставленную браузером, вы не можете использовать div с обработчиками Javascript, прикрепленными к ним для ваших ссылок.

Что вы можете сделать: используйте window.open с _blank как цель, но вы столкнетесь с проблемами с блокировщиками всплывающих окон, и это, вероятно, не то, что вы хотите.

Вы также можете использовать <a class="link" href="my-ajax-view/?some=parameters">press me</a> и написать страницу, на которой отображается контент, который вы ищете (что мне кажется лучшим решением для меня, потому что тогда вы также обеспечили бы функциональность для 5% пользователей, у которых отключен Javascript) , Вы можете по-прежнему выполнять некоторые причудливые загрузки AJAX с помощью JQuery по щелчку этой ссылки, но если кто-то открывает ссылку на новой вкладке, вы перенаправляетесь на страницу, которая собирает информацию. Ваш новый обработчик щелчка будет выглядеть следующим образом:

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

Вы всегда можете динамически создать HTML страницу с кодом PHP и возвращает адрес к нему и, как упоминалось цель = «_blank» его на window.open команды от javascript.

В качестве альтернативы, будет ли использоваться пользовательский интерфейс jQuery для создания новой вкладки с данными результата?

3

Это противоречит концепции AJAX, которая намерена избавиться от этого each user action required that the page be re-loaded from the server, отправив запросы на отдельные данные, что приведет к обновлению текущей страницы. Запрос данных для создания новой вкладки с разрывами вне этой концепции, , это требует, чтобы вы сделали второй запрос, чтобы фактически отобразить вкладку.

Либо выбрать для:

  1. Данные, которые должны быть представлены в текущей вкладке с помощью AJAX, ...

  2. ИЛИ не делают никакой AJAX вообще и просто открыть новую вкладку, какие запросы данные.

Не смешивайте эти два, потому что это просто не имеет смысла.

1

Я боролся с той же проблемой, и я нашел очень простое решение. Это просто в основном проверка кода AJAX с простым условием, как это:

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

Таким образом, вы вызываете AJAX только тогда, когда вы не нажмете среднюю кнопку мыши, если вы делаете это по-прежнему ведет себя как нормальная связь, так что открывает страницу на новой вкладке.

Смежные вопросы