Javascript AJAX链接导致删除div内容,但不插入新文本
使用Rails 3.2.8 选择链接会产生预期的确认对话框,“哦,是吗?” 选择“确定”按钮的预期结果是,Javascript AJAX链接导致删除div内容,但不插入新文本,javascript,ajax,jquery,ruby-on-rails-3.2,Javascript,Ajax,Jquery,Ruby On Rails 3.2,使用Rails 3.2.8 选择链接会产生预期的确认对话框,“哦,是吗?” 选择“确定”按钮的预期结果是,中的文本“表单在此显示”应更改为“表单\n通知” 实际结果是文本“表单在此显示”按其应有的方式消失,但在 页面代码显示HTML5 doctype、rails和AJAX链接包含的jQuery文件: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> &
中的文本“表单在此显示”应更改为“表单\n通知”
实际结果是文本“表单在此显示”按其应有的方式消失,但在
页面代码显示HTML5 doctype、rails和AJAX链接包含的jQuery文件:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<title></title>
<script src="/assets/jquery.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery_ujs.js?body=1" type="text/javascript"></script>
<script src="/assets/application.js?body=1" type="text/javascript"></script>
<meta content="authenticity_token" name="csrf-param" />
<meta content="0ycwNRsr8kneUjB5/SFz+LD+bnhbQHXMJzgADbkv78g=" name="csrf-token" />
</head>
<body>
<a href="/sessions/new" data-confirm="oh yeah?" data-remote="true">Hello world!</a>
<div id="target">
the form goes here
</div>
</body>
</html>
模板:app/views/sessions/new.js.erb
respond_to :html, :js
def new
@session = "snookums"
respond_with(@session)
end
var session_form = $('<%= j(render(:partial => "form")) -%>');
$('#target').html(session_form);
开发日志
Started GET "/sessions/new" for 127.0.0.1 at 2012-11-10 15:57:20 -0500
Processing by SessionsController#new as JS
the form "snookums"
Rendered sessions/_form.html.erb (1.2ms)
Rendered sessions/new.js.erb (48.9ms)
Completed 200 OK in 65ms (Views: 64.0ms | ActiveRecord: 0.0ms)
一切似乎都有联系。我在new.js.erb中生成的响应是否有问题?是$('#target').html(会话形式)代码>相当于“将div'target'的内容替换为'session_form'中包含的文本”
顺便说一句,FWIW我也在没有确认的情况下尝试了它-没有区别。对于与ajax相关的问题,使用错误处理程序查看返回的结果是一种很好的习惯。
为此,我在使用ajax的所有页面中都包含了这个代码块
$.ajaxSetup({
error:function(x,e){
if(x.status==0){
alert('You are offline!!\n Please Check Your Network.');
}else if(x.status==404){
alert('Requested URL not found.');
}else if(x.status==500){
alert('Internal Server Error.');
}else if(e=='parsererror'){
alert('Error.\nParsing JSON Request failed.');
}else if(e=='timeout'){
alert('Request Time out.');
}else {
alert('Unknow Error.\n'+x.responseText);
}
}
});
您的ajax代码是什么样子的?可以帮助您查看调用$('#target').html(session_form)
的位置,它实际上表示在id=target
中插入新的html这是一个无效的选择器$('the form\nsnookums'));
。不确定这是否合适。再次查看更多代码将有所帮助,谢谢@Sean Vieira。除jQuery提供的代码外,所有代码都在上面。简要地说:“Hello World!”链接已选中。请求将发送到控制器,其中“@session”由“new”操作创建。“new.js.erb”模板将生成javascript代码以在div“target”上执行。文本“th”e form\n nookums'是从部分''u form'作为'session\u form=$()'的参数组合而成的。Firebug执行javascript,清除div文本…然后无法将其替换为'the form\n nookums'。选择器是'$('.\n目标')'.$('the form\n nookums'))'是要通过选择器的'html'方法插入的文本。抱歉,charlietfl,我的属性搞错了;希望我的编码更好!你需要显示更多的javascript代码。我将此代码放入application.js中。目前还没有警报。你能提供给我们一个url进行测试吗?我没有办法部署-我的公共服务器仍然是Rails 2.2.2。主要的我们必须处理的是Firebug响应。我已经解决了这个问题。如果我在app/views/sessions/_form.HTML.erb的文本周围添加一些HTML标记,div将按预期更新。Firebug响应类似于:“var session_form=$('the form\nsnookums\n')$(“#target”).html(会话表单);“。有趣的是,这是关于“responses_to:js”(no:html”)。对于我使用“_form”处理尚未包含表单的文件可能造成的任何混乱,我深表歉意。如果有人能够解释如何在没有html标记的情况下替换文本,这可能是一个成熟的解决方案。感谢您的关注。
$.ajaxSetup({
error:function(x,e){
if(x.status==0){
alert('You are offline!!\n Please Check Your Network.');
}else if(x.status==404){
alert('Requested URL not found.');
}else if(x.status==500){
alert('Internal Server Error.');
}else if(e=='parsererror'){
alert('Error.\nParsing JSON Request failed.');
}else if(e=='timeout'){
alert('Request Time out.');
}else {
alert('Unknow Error.\n'+x.responseText);
}
}
});