我正在尝试通过ajax POST请求将字符串从Python传递到Javascript,但我发现了很多困难。
无论是否使用JSON我都尝试过。
这是代码
JAVASCRIPT
$.ajax({
url: url, #url of the python server and file
type: "POST",
data: {'data1': "hey"},
success: function (response) {
console.log(" response ----> "+JSON.parse(response));
console.log(" response no JSON ---> " +response);
},
error: function (xhr, errmsg, err) {
console.log("errmsg");
}
});
的Python
import json
print "Access-Control-Allow-Origin: *";
if form.getvalue("data1") == "hey":
out = {'key': 'value', 'key2': 4}
print json.dumps(out)
结果是一个空的JSON。当我在javascript中执行类似JSON.parse的操作时,我得到意外的输入错误结束,当我尝试获取响应数据的长度时,我获得的大小为0。 我想客户端服务器通信应该存在一些问题(我使用的是CGIHTTPServer),或者python或javascript期望的数据类型可能有问题。
我也试过没有JSON,有类似的东西 Python
print "heyyyyy"
的Javascript
alert(response) //case of success
但我也有一个空字符串。
你能否给我一些处理这个问题的建议? 非常感谢!
答案 0 :(得分:1)
您可能希望比较代码CGIHTTPRequestHandler run php or python script in python和http://uthcode.blogspot.com/2009/03/simple-cgihttpserver-and-client-in.html的两个代码段。
没有足够的代码来说明您的请求处理代码的位置,但是如果它位于继承自CGIHTTPRequestHandler
的类中,那么您需要使用self.wfile.write(json.dumps(out))
等。
答案 1 :(得分:1)
我设法使用Django Framework中的HTTPResponse方法解决了这个问题。
现在它与此非常相似
PYTHON(用JSON回答客户端)
from django.http import HttpResponse
...
data = {}
data['key1'] = 'value1'
data['key2'] = 'value2'
.....
response = HttpResponse(json.dumps(data), content_type = "application/json")
print response;
JAVASCRIPT(退休和阅读JSON)
success(response)
alert(JSON.stringify(response));
或者,如果我只想发送一个字符串或没有JSON的整数
PYTHON(没有JSON)
response = HttpResponse("ayyyyy", content_type="text/plain")
print response
JAVASCRIPT(检索字符串或值)
success: function (response) {
alert(response);
这非常好用,在我看来它非常简单易读!
答案 2 :(得分:0)
而不是print json.dumps(out)
,您应该使用return json.dumps(out)
print
只会在python的控制台中显示它,就像javascript中的console
一样。