これは 私の前の質問(未解決) へのフォローアップです。
データベースからitems
をフェッチし、forループで表示します。 jQueryを使用して行の1つを非表示にします。次に、その非表示行の_main_id
_を取得し、それを_$.ajax
_に渡す必要があります。元の質問で、Paulはalert(this.attr("title"));
を使用することを提案しましたが、この行は_$.ajax
_呼び出しの実行を停止し、呼び出しは実行されません。アラートalert(this.attr("title"));
をコメントアウトすると、ajax呼び出しが実行されます。その場合、ハンドラーのdisplay_false()
関数が_main_id
_の値を取得しないため、エラーが発生します。
これは、_title=%s
_の「非表示」リンクのhtmlです。
_<a class="false" title=%s href="/useradminpage?main_id=%s&display=false"><span class="small">(hide)</span></a>
_
したがって、ajax呼び出しの実行時に、alert(this.attr("title"));
に格納されている_main_id
_の値を関数display_false()
に渡す必要があります。
これどうやってするの?
関連するコードは次のとおりです。
スクリプト
_ 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()
...
_
更新
James Montagneの回答(いくつかの変更を加えたもの) に従ってコードを更新しました。現在、何らかの理由で、ドキュメントレディがロードされておらず、行を非表示にする呼び出しは機能していませんが、データベースを更新するajax呼び出しは機能しています。私は何が間違っているのですか?
_<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>
_
その値を警告する必要はありません。渡す必要があります。現在、文字列title
を渡しています。
$.ajax({
url: "/useradminpage?main_id=%s&display=false",
data: {main_id: this.attr("title")}
success: function(data) {
display_false()
alert(4 - "returned");
}
});
<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>