Javascript 为什么响应后打印未定义?

Javascript 为什么响应后打印未定义?,javascript,python,flask,google-chrome-extension,Javascript,Python,Flask,Google Chrome Extension,我正在尝试构建一个chrome扩展,当我从Flask端点获得JSON响应时,它会在我的scipt中正确打印为{“rating”:3.5}。但当我尝试使用resp.rating和resp[“rating”]访问评级时,它们都返回未定义。这是我的Flask脚本中的代码 import json from flask import Flask, request from flask_cors import CORS from clean import clean_comment from textblo

我正在尝试构建一个chrome扩展,当我从Flask端点获得JSON响应时,它会在我的scipt中正确打印为
{“rating”:3.5}
。但当我尝试使用
resp.rating
resp[“rating”]
访问评级时,它们都返回未定义。这是我的Flask脚本中的代码

import json
from flask import Flask, request
from flask_cors import CORS
from clean import clean_comment
from textblob import TextBlob

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

@app.route("/predict/", methods=["GET", "POST"])
def predict():
    comments = []
    rating = 0
    
    if request.method == "POST":
        comments = request.json["comments"]
    for comment in comments:
        temp = TextBlob(clean_comment(comment)).sentiment.polarity
        print(clean_comment(comment) + ": " + str(temp))
        rating += temp

    if rating > 0:
        rating = (((rating/len(comments) + 1) / 2) * 5) * 1.2
    if rating >= 5:
        rating = 5.0
    print(rating)
    return json.dumps({"rating": str(rating)})
下面是我访问它的方式

chrome.extension.onMessage.addListener(
    function(request, sender, sendResponse) {
    if (request.message === "activate_icon") {
        chrome.tabs.query({active:true,windowType:"normal", currentWindow: true}, function(d){
            chrome.pageAction.show(d[0].id);
        })
    }
    if(request.comments) {
        $.ajax({
            type: 'POST',
            contentType: 'application/json',
            headers: {"Access-Control-Allow-Origin":"*"},
            url: "http://127.0.0.1:5000/predict/",
            data: JSON.stringify({'comments': request.comments}),
            success: function(resp) {
                // this is where console.log(resp.rating) and console.log(resp["rating"]) return
                // undefined but console.log(resp) returns the correct output
                chrome.runtime.sendMessage(resp)
            }
        });
    }
});
json.dumps()
不是有效的http响应。我想你想要:

from flask import Flask, request, Response

return Response(json.dumps({"rating": str(rating)}), mimetype='application/json')
json.dumps()
不是有效的http响应。我想你想要:

from flask import Flask, request, Response

return Response(json.dumps({"rating": str(rating)}), mimetype='application/json')

使用较新的
flask
版本,实际上您可以按如下方式返回数据,而无需使用
jsonify
Response

return {'rating': str(rating)}

Flask
会自动为您添加正确的标题。

对于较新的
Flask
版本,实际上您可以按如下方式返回数据,而无需使用
jsonify
Response

return {'rating': str(rating)}

Flask
会自动为您添加正确的标题。

分离问题。要么返回了不正确的JSON,要么读取错误。只包含错误中的实际部分,显示实际JSON(或最接近它的点)的输入或输出。使用cURL和/或开发人员工具和/或模拟服务器可能很有用。要么返回了不正确的JSON,要么读取错误。只包含错误中的实际部分,显示实际JSON(或最接近它的点)的输入或输出。使用cURL和/或开发工具和/或模拟服务器可能会很有用。谢谢!这很有效。知道
Response
是什么将数据转换成正确格式的吗?谢谢!这很有效。知道
Response
是如何将数据转换为正确格式的吗?