#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...
})