【发布时间】:2014-03-24 18:18:58
【问题描述】:
Linux bogon 3.9.5-301.fc19.i686,nginx1.4.2 + web.py0.37 + uwsgi2.01
我编写了一个获取用户输入(文本字符串)的 html 页面,并将其发布到后端。后端只是读取输入字符串并发送回页面。
<script type="text/javascript">
jQuery(document).ready(function(){
jQuery("#ExtButton").click(function(){
var postdata = document.getElementById("url_to_get").value;
jQuery.ajax({
type: 'POST',
url: "http://127.0.0.1/TextPickup",
data: postdata,
success: function(data,status){alert("status:"+ status +",data:" +data)},
dataType:'html'
});
});
});
</script>
<input type="text" name="url_to_get" id="url_to_get" style="width:310px">
<button id="ExtButton">send</button>
和后端的python脚本:
import web
import os
urls = (
'/','Index',
'/TextPickup','TextPickup',
'/TextAnalysis', 'TextAnalysis'
)
class Index:
...
class TextPickup:
def POST(self):
dest_url = web.data()
return dest_url + ".."
class TextAnalysis:
...
但是当我放东西并点击按钮时,数据是空的,如下所示:
我已经检查了 uWSGI 的输出,
[pid: 20807|app: 0|req: 1/1] 127.0.0.1 () {50 vars in 800 bytes} [Sun Feb 23 13:44:58 2014] POST /TextPickup => generated 6 bytes in 2 msecs (HTTP/1.1 200) 0 headers in 19 bytes (2 switches on core 0)
甚至是wireshark: 很明显,后端已成功发送响应,包括字符串“test..”,但为什么回调函数没有将响应字符串作为其参数?
更新:
在萤火虫中,
当我右键单击http://127.0.0.1/TextPickup 并选择“在新选项卡中打开”时,
出现了一个包含预期字符串“test..”的页面。但是,它应该是回调函数的参数。
【问题讨论】:
-
你能用浏览器开发者工具的网络标签检查响应吗
-
既然你发送的是纯文本,你可以试试 dataType : 'text'
-
看起来您的 python 脚本正在以十六进制形式返回它,否则在您的“wireshark”响应区域中它会以字符串形式返回您的响应。尝试将您的
dest_urlvar 显式转换为字符串(对不起,如果这是错误的,我以前从未使用过 python,所以这只是一个猜测) -
@ArunPJohny 我已经尝试使用 firebug 来检查响应,但仍然无法弄清楚
-
@palanik 'text' 和 'html' 都不起作用
标签: javascript jquery python http web.py