2016-11-16 141 views
0

我向myserver.py本地服務器發送一個XMLHttpRequest,服務器從網站地址讀取params以從本地文件讀取數據。但我無法獲取數據(狀態0和responseText爲空)。XMLHttpRequest status 0和responseText在本地python服務器中爲空

這裏是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() 

首先,我在終端運行 '蟒蛇myserver.py 8080' 啓動本地服務器,然後我打開'chrome'瀏覽器並點擊'發送HTTP GET請求'按鈕,但是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'並打印和正確的信息。

操作系統:Mac OS。瀏覽器:Chrome。

+0

'onclick =「readTvInfo(); return false;」'它有什麼區別? – epascarello

+0

仍爲0狀態。 – yangqinj

回答

0

如果你想在你的ajax響應中獲取數據,你必須在你的服務器腳本上打印它,而不是返回。 在serverSide上使用print而不是return。

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已經產生了一個stdout。 –

+0

如果我刪除打印,如何將數據返回給html? – yangqinj

相關問題