我使用带有自定义模块的Odoo 10,并创建了这个简单的控制器。当我从浏览器访问http://127.0.0.1:8069/cmodule/cmodule时,它工作正常。它显示返回字符串。

我同时尝试了GET和POST,但是得到了相同的错误结果。关于CORS政策阻止请求的信息。我的Google力量尚未真正找到解决方法或任何替代方法。

但是,当我尝试通过其他用PHP / javascript编写的东西通过AJAX请求时。我在javascript上收到此错误:


  从源“ http://127.0.0.1:8069/cmodule/cmodule/”对“ http://127.0.0.1”处的XMLHttpRequest的访问已被CORS策略阻止:在所请求的资源上不存在“ Access-Control-Allow-Origin”标头。


以及来自odoo的错误:


  2020-04-30 08:18:13,401 23156信息? werkzeug:127.0.0.1--[30 / Apr / 2020 08:18:13]“ GET / cmodule / cmodule / HTTP / 1.1” 404-


这是我的Odoo-10自定义模块控制器的简单代码:

# -*- coding: utf-8 -*-
from odoo import http

class Cmodule(http.Controller):
    @http.route('/cmodule/cmodule/', auth='public', cors='*')
    # I also tried here auth='none' and method='POST' and method='GET'
    def index(self, **kw):
        datas = http.request.env['product.product'].sudo().search(
            [('product_group', '=', 'assort')], limit=50)
        dstr = ','.join(datas )
        # {'ret_val': dstr }
        # I return {'ret_val': dstr } when doing POST request from AJAX.
        return dstr



这是我的AJAX请求中的代码:

            $.ajax({
                type: "GET",
                // type: "POST",
                url: "http://127.0.0.1:8069/cmodule/cmodule/",
                // data: { data: 'HELLO' },
                success: function(response){
                    console.log(response);
                }
            });

最佳答案

在尝试其他事情时,请尝试简单身份验证

import odoo.addons.web.controllers.main as main
class Home(main.Home):
    @http.route('/web/session/authenticate', type='json', auth="none" ,cors='*')
    def authenticate(self, db, login, password, base_location=None):
    request.session.authenticate(db, login, password)
        return request.env['ir.http'].session_info()



从IOS访问它时,我遇到了相同的错误,但与邮递员合作得很好
这段代码很好用,您在这段代码中做了所有事情,但仍然

10-06 12:33