我的create.js.erb
文件中包含此代码:
pollingAJAX();
function pollingAJAX() {
$.ajax({
method: "POST",
url: "/status",
data: {uuids: '<%= @uuid_hash.to_json %>'},
},
success: function(data){
var obj = $.parseJSON(data);
if(obj.isDone == "yes"){
}else{
obj.each(function(result) {
if(result.status == "completed"){
$('a[href="#{result.url}"]').html('');
}
});
pollingAJAX();
}
}
});
}
由于我的create.js.erb文件未呈现,因此未触发此AJAX请求。我的create
操作中包含此代码:
result['items'].each do |r|
# escaped_url = URI.escape(r['link'], Regexp.new("[^#{URI::PATTERN::UNRESERVED}]")).gsub("%","-")
@site_array << r['link']
if Result.where(:link => r['link']).present?
else
job_id = ImageGenerator.create(:url => r['link'])
@uuid_hash[r['link']] = job_id
end
end
respond_to do |format|
format.html
format.js
end
我认为这可能与我在调用respond_to
之前使用Resque处理大量后台作业这一事实有关吗?
如何触发我的create.js.erb
文件?
答案 0 :(得分:0)
更新:请确保您的JavaScript实际上包含<script>
标记,否则永远不会加载。
在定义了该函数后,将pollingAJAX()
的调用移动到。如果它(词法上)解析好,JavaScript会在解释时线性执行,而不是编译然后执行,因此pollingAJAX()
函数在您调用调用的位置尚不存在。
此外,始终在浏览器中查看源代码,以确保.erb按照您的预期方式进行处理。并在浏览器中使用您的JavaScript控制台来检测任何错误。
答案 1 :(得分:0)
由于您似乎正在使用AJAX请求语法中的jQuery,因此可以将方法绑定到DOM加载事件:
$(function() {
pollingAJAX();
});
这将阻止pollingAJAX()执行,直到整个Javascript文件被解析后,允许此函数找到它的定义。
在此处查看更多内容:http://www.learningjquery.com/2006/09/introducing-document-ready