Monday, May 20, 2024
 Popular · Latest · Hot · Upcoming
77
rated 0 times [  82] [ 5]  / answers: 1 / hits: 63254  / 13 Years ago, sat, october 8, 2011, 12:00:00

This is a follow up to my previous question (unresolved).



I fetch items from the database and display them in a for loop. I use jQuery to hide one of the rows. Now I need to get the main_id of that hidden row and pass it to $.ajax. In the original question Paul suggested to use alert(this.attr(title)); but this line stops the execution of the $.ajax call and the call is not executed. When I comment out the alert alert(this.attr(title)); then the ajax call goes through. In that case, I get an error because the display_false() function in the handler does not get the value of the main_id.



This is the html of the hide link with title=%s.



<a class=false title=%s href=/useradminpage?main_id=%s&display=false><span class=small>(hide)</span></a>


So I need to pass the value of the main_id stored in alert(this.attr(title)); to the function display_false() when the ajax call is executed.



How can I do this?



The relevant code is below:



The Script



        self.response.out.write(
<html>
<head>
<link type=text/css rel=stylesheet href=/stylesheets/main.css />
<title>User Admin Page</title>
<script src=https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js></script>
<script>

$(document).ready(function() {

alert(1 - document ready is called)
$(a.false).click(function(e) {
$(this).closest(tr.hide).hide(slow);
e.preventDefault();
alert(2 - row is hidden)
});

$(a.false).click(function() {
alert(3 - ajax)
//the following alert stops the ajax call from executing
alert(this.attr(title));

$.ajax({
url: /useradminpage?main_id=%s&display=false,
data: {main_id: title}
success: function(data) {
display_false()
alert(4 - returned);
}
});
});
});


</script>
</head>
<body>
)


HTML



#-----------main table------------#
main_id = self.request.get(main_id)

self.response.out.write(<table class=mytable>
<tr class=head>
<th width=80%>links</th><th>edit tags</th>
</tr>
)

query = Main.all()
query.filter(owner, user)
query.filter(display, True)
query.order(-date)
cursor = self.request.get(cursor)
if cursor: query.with_cursor(cursor)
e = query.fetch(100)
cursor = query.cursor()

for item in e:
main_id = item.key().id()
self.response.out.write(
<tr class=hide>
<td><a href=%s target=_blank>%s</a><span class=small> (%s) </span><br />
<span class=small>%s</span>
<a href=/edit?main_id=%s><span class=small>(edit)</span></a>
<a class=false title=%s href=/useradminpage?main_id=%s&display=false><span class=small>(hide)</span></a>
<a href=/comment?main_id=%s><span class=small>(comments)</span></a></td>
<td><a href=/tc?url=%s&main_id=%s&user_tag_list=%s title=edit tags>%s</a>
</td>
</tr>
% tuple([item.url, item.title, urlparse(item.url).netloc,
f1.truncate_at_space(item.pitch), main_id,

main_id,

main_id, main_id,
item.url, main_id, (, .join(item.tag_list)),
(, .join(item.tag_list)),]))

self.response.out.write(</tbody></table>)

display = self.request.get(display)

def display_false():
if display == false:
main_id = self.request.get(main_id)
#I tried to get the title but this does not work
#main_id = self.request.get(title)
k = Main.get_by_id(int(main_id))
k.display = False
k.put()

display_false()
...


Update



Updated the code according to James Montagne's answer (with a few changes). Now, for some reason, document ready is not loading, and the call to hide the row is not working, but ajax call to update the database is working. What am I doing wrong?



<script>

$(document).ready(function() {

alert(1 - document ready is called)
$(a.false).click(function(e) {
$(this).closest(tr.hide).hide(slow);
var main_id = this.attr(title);
var display = false;
e.preventDefault();
alert(2 - row is hidden)
});

$(a.false).click(function() {
alert(3 - ajax);

$.ajax({
url: /useradminpage?main_id=%s&display=false,
data: {main_id: main_id, display: display)},
success: function(data) {
display_false()
alert(4 - returned);
}
});
});
});


</script>

More From » jquery

 Answers
31

You don't need to alert that value, you need to pass it. Currently you are passing the string title.



    $.ajax({
url: /useradminpage?main_id=%s&display=false,
data: {main_id: this.attr(title)}
success: function(data) {
display_false()
alert(4 - returned);
}
});

[#89727] Thursday, October 6, 2011, 13 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
jaredsages

Total Points: 273
Total Questions: 97
Total Answers: 105

Location: French Southern and Antarctic Lands
Member since Fri, Jan 6, 2023
1 Year ago
jaredsages questions
;