我正在使用 jEditable 允许用户更正表格中的电话号码和电子邮件地址,并在他们按 Enter 时更新数据库。问题是从服务器返回的响应只是被客户端解释为文本,而实际上我想要执行一些 javascript 代码。
jEditable 的工作方式是您不显眼地将“可编辑”操作附加到 DOM 元素,这非常有效。观察客户端使用 tcpdump 向服务器发送的内容,我可以看到 POST 是 html,带有 X-Requested-With: XMLHttpRequest; 从服务器返回的是 Content-Type: text/javascript。
有问题的 Rails 控制器操作是 verify_email,因为我的所有验证逻辑都可以正常工作,但客户端 javascript 不是,所以我将控制器操作缩短为:
def verify_email
respond_to do|format|
format.js
end
end
同样将 verify_email.js.erb 简化为
$(function(){ console.log("hello from verify_email callback")});
您可能认为我会在浏览器控制台中得到一个愉快的问候,但不是,而是 td 的值更改为文本 '$(function(){ console.log("hello from verify_email callback")}) ;'
将 jEditable 功能附加到表数据是按类完成的:
$(function() {
$('.email')
.editable('http://newserver.us.org:3001/directory/review/verify_email', {
indicator : '<%= image_tag "wait18trans.gif", :title => "wait" %>',
tooltip : "Click to edit...",
}
})
})
我只是看不到错误在哪里。我正在与不使用 jEditable 的控件进行比较:我有一个在更改时发布的复选框:
$(function() {
$('.checkmark').change(function() {
$.post("http://newserver.us.org:3001/directory/review/checkmark",
{"id" : $(this).attr("id")})
});
});
当我将相同的控制台日志消息放入 checkmark.js.erb 时,我得到了愉快的问候。在电线上,接头看起来是一样的。
我目前的想法是 jEditable 调整 DOM 以插入文本输入字段,然后将其删除,这以某种方式干扰了 javascript 响应?!?
我向 jEditable 添加了一个回调,以查看返回的内容,如下所示:
$(function() {
$('.email')
.editable('http://newserver.us.org:3001/directory/review/verify_email', {
indicator : '<%= image_tag "wait18trans.gif", :title => "wait" %>',
tooltip : "Click to edit...",
callback : function(value, settings) {
console.log(this);
console.log(value);
console.log(settings);
}
})
})
这会产生以下控制台日志记录:
[Log] <td class="email" id="2-3--1347-597" title="Click to edit...">$(function(){ console.log("hello from verify_email callback")});
[Log] $(function(){ console.log("hello from verify_email callback")});
[Log] Object
ajaxoptions: Object
autoheight: true
autowidth: true
callback: function (value, settings) {
event: "click.editable"
height: 35
id: "id"
indicator: "<img alt="Wait18trans" src="/directory/images/wait18trans.gif" title="wait" />"
loaddata: Object
loadtext: "Loading..."
loadtype: "GET"
name: "value"
onblur: "cancel"
placeholder: ""
submitdata: Object
target: "http://newserver.us.org:3001/directory/review/verify_email"
tooltip: "Click to edit..."
type: "text"
width: 202
__proto__: Object
只是value
一串javascript没有帮助。
最终我想要 javascript 做的是更新 td 的 id。所以也许我需要在 jEditable 帖子之前获取对 td 的引用,用于在返回时找到正确的元素?