alert(data.name);
不会返回数据对象的名称,但alert(data.price);
会返回价格并保持返回价格,无论我传递给警报的参数是什么。我试图找出原因。如果您有任何想法,请分享。我对这个有趣的,虽然看似不透明且难以调试的语言(即JS / JQ)感到非常陌生。
我在前端运行以下代码以接受用户的股票代码。最初,alert();
包含alert(data.price);
,并显示了股票的价格。我将其更改为alert(data.name);
并仍然得到了价格。然后我将其更改为alert('hello');
,并返回另一个(正确的)股票价格。
前端
<!DOCTYPE html>
<html>
<head>
<script src="https://code.jquery.com/jquery-latest.min.js"></script>
<script>
/*global $*/
/**
* Gets a quote via JSON.
*/
function quote()
{
var url = '/quote?symbol=' + $('#symbol').val();
$.getJSON(url, function(data) {
alert(data.name);
});
}
</script>
<title>ajax0</title>
</head>
<body>
<form onsubmit="quote(); return false;">
<input autocomplete="off" autofocus id="symbol" placeholder="Symbol" type="text"/>
<input type="submit" value="Get Quote"/>
</form>
</body>
</html>
在后端,我运行以下代码。它应该为我提供一个JSON对象,通过点表示法可以访问股票的名称,价格等。
后端:
import csv
import os
import urllib.request
from flask import Flask, jsonify, render_template, request
from flask.exthook import ExtDeprecationWarning
from warnings import simplefilter
simplefilter("ignore", ExtDeprecationWarning)
from flask_autoindex import AutoIndex
app = Flask(__name__)
AutoIndex(app, browse_root=os.path.curdir)
@app.route("/quote")
def quote():
url = "http://download.finance.yahoo.com/d/quotes.csv?f=snl1&s={}".format(request.args.get("symbol"))
webpage = urllib.request.urlopen(url)
datareader = csv.reader(webpage.read().decode("utf-8").splitlines())
row = next(datareader)
return jsonify({"name": row[1], "price": float(row[2]), "symbol": row[0].upper()})
答案 0 :(得分:1)
尝试将数据转换为Javascript对象,因为它从后端传递为JSON,如下所示:
$.getJSON(url, function(data) {
var resp = JSON.parse(data);
console.log(resp)
alert(resp.name);
});
如果这不起作用,则从控制台注释resp。
答案 1 :(得分:0)
虽然虫子的确切性质仍然有点难以捉摸,但WiseGuy(上图)有正确的想法。在每个页面上(例如,基于Web的IDE,HTML表单等的代码窗口),我确保&#34;禁用缓存&#34;已在Chrome开发人员工具的网络标签下选择。另外,我将以下代码从在Flask中完成的先前项目移动到后端,以确保没有缓存响应。我也擦除了我的浏览器历史记录并缓存干净,因为这个bug几天来一直困扰着我,我必须确定我已经覆盖了所有的基础。这些步骤的组合实现了期望的结果。
# ensure responses aren't cached
if app.config["DEBUG"]:
@app.after_request
def after_request(response):
response.headers["Cache-Control"] = "no-cache, no-store, must-revalidate"
response.headers["Expires"] = 0
response.headers["Pragma"] = "no-cache"
return response