2016-11-16 10 views
0

私は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。

+0

'onclick =" readTvInfo(); return false; "'それは違いがありますか? – epascarello

+0

まだステータスは0です。 – yangqinj

答えて

0

あなたのajaxレスポンスでデータを取得したい場合は、返されたサーバースクリプトでそれを印刷する必要があります。 serverSideでreturnの代わりにprintを使用します。

XMLHttpRequestステータス0は、responseTextが空であることを通知します。

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) 
    print json.dumps(info) 


if __name__ == "__main__": 
    app = web.application(urls, globals()) 
    app.run() 
+0

すぐにお返事ありがとうございます!私はpython 3.5.2を使用していますので、 'print(json.dumps(info))'を試みましたが、それでも同じ結果が出ました。 – yangqinj

+0

印刷物を削除するとどうなりますか? json.dumpはすでに標準出力を生成しているようです。 –

+0

印刷物を削除した場合、どうすればデータをhtmlに戻すことができますか? – yangqinj

関連する問題