私はXMLHttpRequestをmyserver.pyローカルサーバーに作成しています。サーバーはローカルファイルからデータを読み取るためにWebサイトアドレスからparamsを読み取ります。しかし、私はデータを得ることができません(ステータス0とresponseTextは空です)。ここでローカルのPythonサーバーでXMLHttpRequestのステータスが0でresponseTextが空です
は、HTMLとAjaxのファイルです:
<!DOCTYPE html>
<html>
<head>
<script src="./js/jquery-3.1.1.min.js"></script>
<script type="text/javascript">
function readTvInfo()
{
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function()
{
document.getElementById("myDiv").innerHTML = xmlhttp.status;
if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
{
document.getElementById("myDiv").innerHTML = "test";
// document.getElementById("myDiv").innerHTML = xmlhttp.responseText;
}
}
xmlhttp.open("GET","http://127.0.0.1:8080/?tvname=langyabang",true);
xmlhttp.send();
}
</script>
</head>
<body>
<button onclick="readTvInfo()">send HTTP GET Request</button>
<div id="myDiv"></div>
</body>
</html>
myserver.pyが
まずimport web
import json
urls = (
'/', 'GetTvInfo'
)
class GetTvInfo:
def GET(self):
tvname = web.input()['tvname'] #get tvid
info = {}
keys = ['name', 'arear', 'language', 'type', 'actors', 'director', 'intro'];
values = []
with open('./data/' + tvname + '.txt') as infile:
for index, line in enumerate(infile.readlines()):
values.append(line.strip('\n'))
# print(values)
info = dict(zip(keys,values))
print(info)
web.header('Content-Type', 'application/json; charset=utf-8')
return json.dumps(info)
if __name__ == "__main__":
app = web.application(urls, globals())
app.run()
ですが、私は、ローカルサーバーを起動するために、端末に 'Pythonのmyserver.py 8080' を実行します「chrome」ブラウザを開き、「HTTP GET Requestを送信」ボタンをクリックしますが、htmlページにはボタンの下に0が表示されます(xmlhttp.statusが実際に0であることを意味します)。しかし、サーバー端末は、 "HTTP/1.1 GET /" - 200 OK "と表示して、印刷して正しい情報を表示します。
ブラウザに直接「http://127.0.0.1:8080/?tvname=langyabang」と入力すると、実際に情報を正しく取得できます。そして、サーバー端末は、 "HTTP/1.1 GET /" - 200 OK "と表示して、印刷し、正しい情報を表示します。
OS:Mac OS。ブラウザ:Chrome。
'onclick =" readTvInfo(); return false; "'それは違いがありますか? – epascarello
まだステータスは0です。 – yangqinj