вкладки пользовательского интерфейса jQuery: как отправить ajax-запрос с данными post?


Из вкладок пользовательского интерфейса jQuery:

<script>
$(function() {
    $( "#tabs" ).tabs({
        ajaxOptions: {
            error: function( xhr, status, index, anchor ) {
                $( anchor.hash ).html("Couldn't load this tab.");
            }
        }
    });
});
</script>


<div class="demo">

<div id="tabs">
    <ul>
        <li><a href="#tabs-1">Preloaded</a></li>
        <li><a href="ajax/content1.html">Tab 1</a></li>
        <li><a href="ajax/content2.html">Tab 2</a></li>
    </ul>
    <div id="tabs-1">
        <p>Proin elit arcu, rutrum commodo.</p>
</div>

Как отправитьajax-запрос с post-данными в этом случае (возможно, через ajaxOptions).

Я не знаю, как изменить URL-адреса вкладок для отправки данных post, например:

<li><a href="ajax/content1.html(country:1,city:35)">Tab 1</a></li>
<li><a href="ajax/content2.html(code:'aa')">Tab 1</a></li>

Спасибо!

Отредактировано :

В jQuery это:

$.load("some_url",{country: countryValue});

Таким образом, у меня есть заголовок post (country) и значение post (countryValue). Как сделать то же самое с каждой вкладкой?

1 4

1 ответ:

Чтобы сделать метод AJAX POST, вы можете добавить type к объекту ajaxOptions. Чтобы собрать данные для записи, можно воспользоваться jQuery.data(), а затем скрыть параметры записи в Якоре.

<div id="tabs">
    <ul>
        <li><a href="#tabs-1">Preloaded</a></li>
        <li><a href="ajax/content1.html">Tab 1</a></li>
        <li><a href="ajax/content2.html" data-country="1" data-city="35">Tab 2</a></li>
        <li><a href="ajax/content3-slow.php">Tab 3 (slow)</a></li>
        <li><a href="ajax/content4-broken.php">Tab 4 (broken)</a></li>
    </ul>
    <div id="tabs-1">
        <p>Proin elit arcu, rutrum commodo.</p>
</div>

И JavaScript:

var postData = {};

$("#tabs").tabs({
    select: function(event, ui) {
        postData = {
            country: parseInt($(ui.tab).data('country')),
            city: parseInt($(ui.tab).data('city'));
        };
    },
    ajaxOptions: {
        type: 'POST',
        data: postData,
        error: function(xhr, status, index, anchor) {
            $(anchor.hash).html("Couldn't load this tab. We'll try to fix this as soon as possible. " + "If this wouldn't be a demo.");
        }
    }
});

Попробуйте: JSFiddle

Если ваши параметры изменяются для каждой ссылки, вам придется придумать способ узнать, какие параметры вы ищете. Вы можете получить индекс вкладки в событии select() с помощью ui.index и использовать switch для получения различных параметров для каждого случая. По общему признанию, это решение не очень красиво, но оно может сработать.