我有一个 HighCharts 客户端,其职责是从Web服务加载数据并显示图表。请求数据的功能如下所示:
function requestData() {
$.ajax({
url: 'http://myhost.com/type?x=1&y=2&z=3',
headers: {
Accept : "application/json"
},
type: "GET",
dataType: "json",
success: function(data) {
//do something
},
cache: true
});
}
(将来,url
属性将动态生成)
目标Web服务是只读的,并使用 Flask 微框架实现:其目的是将JSON数据返回给HighCharts客户端。这是处理数据请求的Flask视图(函数):
@app.route('/<type>')
def get_data(type):
x = request.args.get('x','')
y = request.args.get('y','')
z = request.args.get('z','')
[...]
问题:当我在Chrome中执行javascript代码时,以下HTTP请求将发送到网络服务:
GET /type?x=1&y=2&z=3 HTTP/1.1 // '&' have been escaped to '&'
Host: myhost.com
Connection: keep-alive
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11
Accept: application/json
Referer: http://myhost.com/chart.html
Accept-Encoding: gzip,deflate,sdch
Accept-Language: it-IT,it;q=0.8,en-US;q=0.6,en;q=0.4
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
...我从服务器获得了404状态代码(错误请求),这非常好,并且只要一个或多个请求的查询参数为空或格式错误,就可以预期:
HTTP/1.0 400 BAD REQUEST
Content-Type: text/html; charset=utf-8
Content-Length: 16
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Wed, 14 Nov 2012 10:23:49 GMT
在我的Flask webservice上调试后,我注意到只有x
查询参数(请注意是HTTP请求中的第一个)是正确解析,而{{1} }和y
是 empy strings ,这会导致404。
为什么会这样?关于z
- &gt;的任何字符集不一致&
逃跑?
谢谢,任何提示都会有实际帮助(只要询问您是否需要更多规格或代码)
答案 0 :(得分:2)
我认为错误与您预期的转义符号一样。
试试这个:
function requestData() {
$.ajax({
url: 'http://myhost.com/type',
headers: {
Accept : "application/json"
},
data: {
x: 1,
y: 2,
z: 3
},
type: "GET",
dataType: "json",
success: function(data) {
//do something
},
cache: true
});
}