Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 巨蟒问题_Javascript_Jquery_Python_Ajax_Flask - Fatal编程技术网

Javascript 巨蟒问题

Javascript 巨蟒问题,javascript,jquery,python,ajax,flask,Javascript,Jquery,Python,Ajax,Flask,我对Python有点陌生,但在使用节点应用程序时也遇到了同样的问题。我正在向本地Python服务器发出一个非常标准的jQuery AJAX请求: init: function(callback) { var token = _config.get_token(); $.ajax({ url: 'http://localhost:5000/api/ia/v1/user_likes',

我对Python有点陌生,但在使用节点应用程序时也遇到了同样的问题。我正在向本地Python服务器发出一个非常标准的jQuery AJAX请求:

init: function(callback) {
            var token = _config.get_token();

            $.ajax({
                    url: 'http://localhost:5000/api/ia/v1/user_likes',
                    type: 'POST',
                    contentType: 'application/json',
                    datatype: 'json',
                    data: token
                })
                .done(function(data) {
                    callback(data);
                })
                .fail(function(err) {
                    callback(err);
                });

            callback(token);
        }
我可以确认变量标记正在确认,如下所示:

Object {access_token: "791415154.2c0a5f7.4d707361de394512a29682f9cb2d2846", campaign_id: "102"}
但是我从我的javascript控制台得到这个错误:

XMLHttpRequest cannot load http://localhost:5000/api/ia/v1/user_likes. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://s3.amazonaws.com' is therefore not allowed access. The response had HTTP status code 500.
我发现,当我构建节点应用程序时,这是一个cors错误。我运行jQueryAjax请求的页面是http。以下是我认为配置不正确的Python代码部分:

from flask import Flask, request, redirect
from flask.ext.cors import CORS, cross_origin

app = Flask(__name__)
cors = CORS(app)
app.config['CORS_HEADERS'] = 'application/json'
路线:

@app.route("/api/ia/v1/user_likes", methods=['POST', 'OPTIONS'])
def user_likes():
    validate = validate_request(request.data)

    return 'something'
My Python error也返回了一个错误,因为请求从未发送到此代码行:

def validate_request(object_from_user):
    load_object = json.loads(object_from_user)

我可以稍后再解决。无论如何,有人对Python的Cors配置有什么建议吗?

在路由装饰器之后使用Cors装饰器

以下是文档中的一个片段

@app.route("/")
@cross_origin() # allow all origins all methods.
def helloWorld():
  return "Hello, cross-origin-world!"
现在,您似乎正在使用json,如果是这样的话,您应该阅读文档,因为它特别提到了这个用例,以及要设置的cors_头。。。这是下面的折叠,但这个文档编写得很好,易于理解


下面的解决方案对我很有效。 我包含了一个方法,该方法将为您添加必要的头,然后引发HTTP响应。 例:


注意:上述方法不是python编译,因此您可能需要对其进行编辑。

以下是如何通过自己处理CORS细节来弄脏您的手:

handle_result = {'result': True, 'msg': 'success'}

try:
    # origin, where does this request come from, like www.amazon.com
    origin = flask.request.environ['HTTP_ORIGIN']
except KeyError:
    origin = None

# only accept CORS request from amazon.com
if origin and origin.find('.amazon.com') > -1:
    resp = flask.make_response(str(handle_result))
    resp.headers['Content-Type'] = 'application/json'

    h = resp.headers
    # prepare headers for CORS authentication
    h['Access-Control-Allow-Origin'] = origin
    h['Access-Control-Allow-Methods'] = 'GET'
    h['Access-Control-Allow-Headers'] = 'X-Requested-With'

    resp.headers = h
    return resp

return flask.abort(403)
试试这个:

@app.after_request
def add_headers(response):
    response.headers.add('Access-Control-Allow-Origin', '*')
    response.headers.add('Access-Control-Allow-Headers', 'Content-Type,Authorization')
我在Flask网站上尝试了@cross_origin教程,但是它对我不起作用

但看起来您可以在以后的响应中添加标题

下面是我认为可能有用的剩余代码

from flask import Flask, request
from sklearn.externals import joblib

app = Flask(__name__)
烧瓶具有模块。 下面是代码片段和过程

  • pip安装-U形烧瓶cors

  • 在烧瓶应用程序中添加以下行:

    from flask import Flask
    from flask_cors import CORS, cross_origin
    
    app = Flask(__name__)
    CORS(app)
    
    @app.route("/")
    def helloWorld():
        return "Hello world"
    

  • 在我尝试其他建议和答案后,单击查看更多信息。这是我用的,很有效

    步骤:

  • pip安装烧瓶cors

  • 复制并粘贴到
    app.py
    文件中

  • 代码

  • python app.py
  • 注意:确保客户端的ajax配置中包含以下内容:

    $.ajaxSetup({
        type: "POST",
        data: {},
        dataType: 'json',
        xhrFields: {
           withCredentials: true
        },
        crossDomain: true,
        contentType: 'application/json; charset=utf-8'
    });
    
    如果有人想知道,
    support\u credentials=True
    仅仅意味着它沿着负载来回发送cookies。

    请在python文件中使用@cross\u origin(origin='*')

    from flask import Flask, jsonify
    from flask_cors import CORS, cross_origin
    
    app = Flask(__name__)
    
    @app.route("/login", methods = ['GET'])
    @cross_origin(origin='*')
    def login():
      return jsonify({'success': 'ok'})
    
    if __name__ == "__main__":
      app.run(host='0.0.0.0', port=8000, debug=True)
    

    基于GyuHyeon Choi的回复,但添加了
    返回回复
    和额外的
    访问控制暴露标题
    ,对我来说很有效

    @app.after_request
    def add_headers(response):
        response.headers.add('Content-Type', 'application/json')
        response.headers.add('Access-Control-Allow-Origin', '*')
        response.headers.add('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS')
        response.headers.add('Access-Control-Allow-Headers', 'Content-Type,Authorization')
        response.headers.add('Access-Control-Expose-Headers', 'Content-Type,Content-Length,Authorization,X-Pagination')
        return response
    

    在客户端,您只需要确保服务器正在处理的数据类型。 例如表单数据或json

    注:十字原点的位置应正确。 对我来说,下面写的代码很神奇

    from flask import Flask,request,jsonify
    from flask_cors import CORS,cross_origin
    app=Flask(__name__)
    CORS(app, support_credentials=True)
    @app.route('/api/test', methods=['POST', 'GET','OPTIONS'])
    @cross_origin(supports_credentials=True)
    def index():
        if(request.method=='POST'):
         some_json=request.get_json()
         return jsonify({"key":some_json})
        else:
            return jsonify({"GET":"GET"})
    
    
    if __name__=="__main__":
        app.run(host='0.0.0.0', port=5000)
    

    我已使用以下命令和如下声明安装了flask:

    Object {access_token: "791415154.2c0a5f7.4d707361de394512a29682f9cb2d2846", campaign_id: "102"}
    
    pips3.6安装——用户烧瓶cors

      from flask_cors import CORS   
        app = Flask(__name__)
        CORS(app)
    

    我尝试了以上所有的解决方案,但都失败了。 我相信,大多数解决方案都会奏效,但我在客户端应用程序中犯了一个非常明显的错误。也许这可以节省一些调试时间。 我收到我的请求,我通过

    'localhost:<port>/<myApi>'
    
    'localhost:/'
    
    对我来说,修复方法非常简单,只需将服务调用为http…:

    'http://localhost:<port>/<myApi>'
    
    'http://localhost:/'
    

    一个愚蠢的错误。

    我今天早些时候查看了这些文档,并尝试了几种不同的配置。添加@cross_origin对我当前的配置没有帮助。对于JSON,之前需要指定允许的头。这一点现在很轻松,应该可以开箱即用。如果您有任何问题,请告诉我。我也在努力实施。我使用@cors decorator,但这是对Flask的最新更新吗?我已经有一段时间没有写Python了。对我来说,这适用于GET和POST路由,但是当我添加一个删除路由时,由于CORS原因它失败了?在我的例子中,ajax设置添加了额外的头字段,如头:{'Access-Control-Allow-Origin':'*'),我犯了同样的错误。axios似乎不采用http。
    'http://localhost:<port>/<myApi>'