我知道之前有人问过,但似乎无法弄明白。我有一个托管python脚本的IIS 6.0服务器。这是python脚本返回的内容...... 它将字典列表转换为json对象,设置标题并返回数据。
try:
name
allergy = json.dumps(sorted(var_allergies, key=operator.itemgetter('name'),reverse=True))
print "Content-type: application/json"
print
print allergy
My ajax call is:
function AllergyPyJSON() {
var url ="http://hostname/cgi-bin/allergies.py?callback=?"
$.ajax({
type: "GET",
url: url,
data: { 'user_id': $('#user').val() },
cache: false,
async: false,
jsonpCallback: 'jsonCallback',
jsonp: true,
dataType: 'jsonp',
contentType: "application/json; charset=utf-8",
success: function (json) {
alert(json)
}
}).done(function (r) {
//alert('done');
}).fail(function (r) {
alert(JSON.stringify(r));
})
}
响应命中失败方法。 { “readyState的:4中,” 状态 “:200,” 状态文本 “:” 成功“}
如果我使用调试器或查看chrome - console - network ...我看到了调用和响应
[{"date": "2014-02-20 10:49:47", "reaction": "None", "name": "Dilantin"}]
所以它调用函数并返回正确的数据。 如何访问回调中的数据?或者为什么它失败并仍然返回数据?
编辑此处是返回HEADERS
Remote Address:100.100.200.200:80
Request URL:http://server/cgi-bin/allergies.py?callback=?&pat_id=0009689&_=1406123902467
Request Method:GET
Status Code:200 OK
Request Headersview source
Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Host:hh-borpt
Referer:http://localhost:42972/Forms/page.htm
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36
Query String Parametersview sourceview URL encoded
callback:?
pat_id:0009689
_:1406123902467
Response Headersview source
Access-Control-Allow-Headers:Origin, X-Requested-With, Content-Type, Accept
Access-Control-Allow-Methods:POST, GET, OPTIONS
Access-Control-Allow-Origin:*
Access-Control-Expose-Headers:Access-Control-Allow-Origin
Connection:close
Content-Type:application/json
Date:Wed, 23 Jul 2014 13:58:20 GMT
Server:Microsoft-IIS/6.0
编辑我想通了:
我需要在我的ajax调用中包含jsonpCallback: 'jsoncallback'
在python方面
print "Content-type: application/json"
print
print "jsonCallback(%s)" % allergy
现在它返回一个函数(填充)中的数据包装器并且它正在工作。成功函数使用json对象触发。
jsonCallback({"date": "2014-02-20 10:49:47", "reaction": "None", "name": "Dilantin"})
答案 0 :(得分:0)
你的'JsonPCallback'在哪里,你声称回调应该是一个名为'JsonCallback'的函数,但你没有在你的帖子中包含该函数。尝试删除该行,然后让json流向您已经构建的成功方法。
请改为尝试:
function AllergyPyJSON() {
var url ="http://hostname/cgi-bin/allergies.py?callback=?"
$.ajax({
type: "GET",
url: url,
data: { 'user_id': $('#user').val() },
cache: false,
async: false,
jsonp: true,
dataType: 'jsonp',
contentType: "application/json; charset=utf-8",
success: function (json) {
alert(json)
}
}).done(function (r) {
//alert('done');
}).fail(function (r) {
alert(JSON.stringify(r));
})
}
答案 1 :(得分:0)
编辑我想通了:我需要在我的ajax调用中包含jsonpCallback:'jsoncallback'
在我的python代码中,我必须在json对象周围包含函数名。
print "Content-type: application/json"
print
print "jsonCallback(%s)" % allergy
现在它返回一个函数(填充)中的数据包装器并且它正在工作。成功函数使用json对象触发。
jsonCallback({"date": "2014-02-20 10:49:47", "reaction": "None", "name": "Dilantin"})