Javascript 从JSON对象检索新数据不起作用?
Javascript 从JSON对象检索新数据不起作用?,javascript,jquery,json,Javascript,Jquery,Json,警报(data.name)不会返回数据对象的名称,尽管警报(data.price)返回价格并继续返回价格,无论我传递给alert的参数是什么。我在想原因。如果你有任何想法,请分享。我对这门有趣的语言(即JS/JQ)是完全陌生的,尽管它看起来不透明且难以调试 我在前端运行以下代码以接受用户的股票代码。最初,alert()包含警报(数据.价格),并显示该股票的价格。我把它改为alert(data.name)并且仍然得到了价格。然后我把它改成了alert('hello'),它返回了另一个(正确的)股价
警报(data.name)
不会返回数据对象的名称,尽管警报(data.price)代码>返回价格并继续返回价格,无论我传递给alert的参数是什么。我在想原因。如果你有任何想法,请分享。我对这门有趣的语言(即JS/JQ)是完全陌生的,尽管它看起来不透明且难以调试
我在前端运行以下代码以接受用户的股票代码。最初,alert()代码>包含警报(数据.价格)代码>,并显示该股票的价格。我把它改为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>
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()})
当数据作为JSON从后端传递时,尝试将其转换为Javascript对象,如下所示:
$.getJSON(url, function(data) {
var resp = JSON.parse(data);
console.log(resp)
alert(resp.name);
});
如果这不起作用,则从控制台对resp进行注释 虽然这个bug的确切性质仍然有些难以捉摸,但WiseGuy(上图)的想法是正确的。在每个页面上(例如,基于web的IDE的代码窗口、HTML表单等),我都确保在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
您是否尝试过清除缓存?当我编写客户端代码时,我喜欢使用Chromes开发工具来禁用缓存。在“网络”选项卡下,选中“禁用缓存”。@WiseGuy-绝对值得一试。非常感谢您的回复。尝试了这个代码,看起来应该可以工作,但它并没有飞起来。要明确的是,你的意思是注释掉console.log(resp)行,如果它不起作用吗?不,如果你打开控制台(在chrome中的F12,然后在选项卡中选择控制台),你会看到“resp”打印在那里。你能把它复制粘贴到下面的评论里吗?这样我就可以帮你弄清楚到底发生了什么。要了解有关调试Javascript的更多信息,请访问此链接,感谢您提供的额外信息和慷慨的帮助。正如上面提到的,我确实设法让一切都正常工作,但是,我肯定会仔细看看您向我提供的资源。干杯