ruby-on-rails - Apache + Passenger集成模式中的Ajax调用触发基本URL

ruby-on-rails - Apache + Passenger集成模式中的Ajax调用触发基本URL,第1张

我正在尝试通过httpd配置文件配置多个RAILS应用程序。一切正常,但AJAX调用触发了错误的URL,例如,如果应用程序配置为 http://localhost/helloapp/ 获得“/ say_hello”的AJAX调用 它试图获得“localhost / say_hello”而不是“localhost / helloapp / say_hello”。 下面是位于'/etc/httpd/conf/httpd.conf的httpd配置文件 ”。我正在使用centOS。

<VirtualHost *:80>
 ServerName localhost
    <Directory /var/www/html >
        Allow from all
        Options -MultiViews
        # Uncomment this if you're on Apache >= 2.4:
        #Require all granted
    </Directory>
   Alias /helloapp /var/www/html/hello_application/public
    <Location /helloapp>
        PassengerBaseURI /helloapp
        PassengerAppRoot /var/www/html/hello_application
    </Location>
    <Directory /var/www/html/hello_application/public>
      # MultiViews must be turned off.
        Allow from all
        Options -MultiViews
    </Directory>
</VirtualHost>

最佳答案:

2 个答案:

答案 0 :(得分:0)

每当您对以/开头的网址发出HTTP请求时,例如/say_hello,就会暗示您是从根网址向您指定的路径发送请求。根网址始终是您的域名,在您的情况下为http://localhost/

因此,无论您如何配置Apache服务器,当您向/say_hello发出请求时,您的浏览器都会将其定向到http://localhost/say_hello。如果您想向http://localhost/helloapp/say_hello发出请求,则必须告诉ajax在您的网站代码中转到/helloapp/say_hello

如果您的rails应用程序名为&#34; helloapp&#34;,您可以通过here所述的方式之一来访问您的rails代码中的应用程序名称。一旦你拥有它,你可以将它存储在一个实例变量中,如@app_name,用于你的模板或javascript(或者你从哪里发出ajax请求)。我认为你正在寻找的东西是这样的:

var url = "/<%= @app_name %>/say_hello";
// do your ajax request with your new url variable

答案 1 :(得分:0)

一种方法是修改所有js文件中所有ajax调用的url,并在url中添加@app_name。

如果您不想编辑所有js文件中的所有ajax网址。在单独的js文件或application.js文件中写下以下代码:

$.ajaxSetup({
    beforeSend: function(data, settings) {
        var url = "/@app_name"  settings.url;
        settings.url = url;

    }
});
本文经用户投稿或网站收集转载,如有侵权请联系本站。

发表评论

0条回复