Передача параметров post с помощью jQuery.post

#jquery #ajax #parameters

#jquery #ajax #параметры

Вопрос:

У меня есть обычный тег привязки, который привязан к $.post (), но у меня возникли проблемы с поиском наилучшего способа передачи параметров. Вот что у меня получилось:

 <a 
href="ajax/tag_delete.php?id=<?php echo $tag->id;?>" <!-- This feels too "GET" and I don't want to have to parse this query string -->
id="<?php echo $tag->id;?>" <!-- this feels wrong, shouldn't have a number as an id  --> 
class="delete_tag_btn">
delete
</a>

<script>
    $('.delete_tag_btn').bind('click', function(event){
        event.preventDefault();
        $.post( this.href, {/* WHAT IS THE BEST WAY TO GET THESE */}, function(reply) {
            log(reply);
        });
    });
</scirpt>
  

Любая помощь очень ценится. Спасибо.

Комментарии:

1. Это довольно упрощенный пример. Что, если бы я хотел передать несколько параметров. В соответствии с этими строками:ajax/tag_delete.php?id=10amp;foo=baramp;blue = red;

Ответ №1:

$(this).attr('href').split('=')[1]

Конечно, это зависит от того, имеет ли ваш URL-адрес один параметр querystring. При необходимости вы можете немного усложнить, но это решает вашу непосредственную проблему.

Редактировать:

 $(document).ready(function(){
    $('.delete_tag_btn').bind('click', function(event){
        event.preventDefault();

        var s = $(this).attr('href').split('?')[1].split('amp;');
        var a = new Object();

        for(var n = 0; n < s.length;   n)
        {
            var t = s[n].split('=');
            console.log(String(t[0]));
            a[String(t[0])] = t[1];
        }

        console.log(a);
    });
});
  

После редактирования вы можете указать любое количество атрибутов в вашем href , которые затем будут переданы вашему post . Другими словами, вы можете использовать эту функцию в любом месте вашего приложения, и вам не нужно указывать, какие ключи получать:

 $.post( 
     this.href, 
     data: a, 
     function(reply) {
            log(reply);
});
  

Комментарии:

1. Спасибо, Демиан, но я ищу более надежное решение.

2. @pardoner: почему ты этого не сказал? 😉 смотрите редактирование (я знаю, что вы уже приняли ответ, но приведенный выше вариант немного более гибкий)

3. @Дамиан, спасибо, это сработает. Думаю, я искал что-то более стандартное — наилучшую практику. Это довольно стандартный способ сделать это?

4. @pardoner: не совсем уверен, существует ли стандартный способ сделать это — некоторые люди будут использовать regex для такого рода вещей, но это не обязательно (regex работает медленнее, чем собственные строковые функции).

Ответ №2:

На самом деле, это должно сработать. Возможно, вам потребуется удалить пустой аргумент object и переключиться на вызов .get…

 $.get(this.href, function(reply){
   // Do whatever
});
  

С другой стороны, вы всегда можете создать объект…

 var data = {
   id: $(this).attr('id')
}
  

Затем передайте это в своем вызове .post…

 $.post(this.href, data, function(reply){
   // Do whatever...
})