gpt4 book ai didi

javascript - 在 Rails 中创建站点徽章或小部件 : Problem calling the second script

转载 作者:行者123 更新时间:2023-12-02 20:36:07 26 4
gpt4 key购买 nike

我正在尽力为 my site 创建网站徽章或小部件,这是一个 Rails 站点。

本质上,它是一个网站,用户可以在其中发布他们创建的内容,其他喜欢该内容的人可以捐款以表达他们的感激之情。

我问了similar question不久前讨论过如何创建一个小部件,但那是在我对 Javascript 进行任何真正的研究之前。

我认为第一个脚本(在 localhost:3000/javascripts/widget.js 中)工作得很好:

    var Widget = 
{
init:function()
{
var loc = window.location;
var title = document.title;
var href = 'http://localhost:3000/donations/new.js?url=' + encodeURIComponent(loc);

href = href + '&title=' + encodeURIComponent(title);

var script = document.createElement('script');
script.src = href;
script.type = "text/javascript";

document.documentElement.firstChild.appendChild(script);

}
};
Widget.init();

(我将其命名为 new.js 的原因是因为主站点上显示了该链接的所有统计信息)为了测试这个脚本,我制作了一个简单的 HTML 文件来调用它:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Test Widget</title>
<script src="http://localhost:3000/javascripts/widget.js" type="text/javascript"></script>
</head>
<body>
<h1>Test Widget</h1>
</body>
</html>

当上面的脚本运行时,我检查了 firebug,果然它调用了第二个脚本:

<script src="http://localhost:3000/donations/new.js?url=file%3A%2F%2F%2FC%3A%2Fgoldhat_production%2Ftest_widget.html&amp;title=Test%20Widget" type="text/javascript"></script>

最后,我使用以下脚本创建了一个 new.js.erb 文件,以确保它被调用:

var Stats =
{
init: function()
{
alert("Hello World!");
}
};
Stats.init();

在捐赠 Controller 中,我将以下代码添加到"new"操作中:

respond_to do |format|
format.js
format.html
end

所以我试了一下,刷新页面时没有收到 Hello World 警报,但当我得到实际调用的内容时,我收到此错误(已 chop ):

 26<h1>
27 ActionController::MethodNotAllowed
28
29</h1>
30<pre>Only put requests are allowed.</pre>
31
32
33
34<p><code>RAILS_ROOT: c:/goldhat_production</code></p>
35
36<div id="traces">

似乎有很多地方我可能会出错,但我不确定在哪里。

最佳答案

您的routes.rb 文件仅允许对您的new 操作发出put 请求。如果您正在使用 map.resources,New 应该允许 get,但您似乎没有使用该功能。

我看到你有三个选择:

1) 如果您要使用 rjs,请将 javascript 调用移至尚未使用的其他方法,并在必要时设置该操作的路由。

map.connect '/donations/[action_name]', :controller => 'donations', :action => '[action_name]', :conditions => { :method => :get }

2) 如果您不打算使用 rjs,只需将其移至静态资源即可。只需将文件移动到您的 /public/javascripts 目录并从那里链接到它即可。

3) 通过将其添加到您的routes.rb 中,允许对您的new 方法发出get 请求。这可能只是允许现有路由语句中的操作,具体取决于已有的内容。

map.connect '/donations/new', :controller => :donations, :action => :new, :conditions => { :method => :get }

我个人会选择选项 1 或 2,只是因为我看不到与"new"的关系,但我可能看不到完整的情况。

关于javascript - 在 Rails 中创建站点徽章或小部件 : Problem calling the second script,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3233238/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com