我无法使用jQuery 1.9.1从AJAX检索服务器端的数据。
这是我的服务器端金字塔代码:
@view_config(route_name='ajax_contact_handler', renderer='json')
def ajax_contact_handler(request):
contact_id = request.POST.get('contact_id', None)
# Use contact_id to perform some DB operations
return dict(cid=contact_id)
这是我的jQuery代码:
$(document).ready(function() {
$("#connect_button").click(function() {
var user_id = 3; // Just for the example
$.ajax({
type: "POST",
url: "/ajax_contact/",
dataType: "json",
data: {"contact_id": user_id},
cache: false,
success: function(result) {
$('#connect_button').html("Contact Added").css("background-color","rgb(151,151,151)");
$('#connect_button').unbind('click');
}
});
});
});
在服务器上,我没有收到contact_id
因此,它被设置为默认None
。
我做错了什么?如何获取要在服务器代码中使用的contact_id
参数?
另外,我的xhr=True
装饰器中是否需要view_config
- 当它存在时,我手动导航到我收到404的ajax_contact
页面(是预期的结果)?
感谢您的帮助。
修改的 更多信息:
Request URL:http://localhost:8080/ajax_contact/
Request Method:POST
Status Code:200 OK
Request Headersview source
Accept:application/json, text/javascript, */*; q=0.01
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Content-Length:16
Content-Type:application/x-www-form-urlencoded; charset=UTF-8
Cookie:pdtb=hide; auth_tkt="52932923705e421fe29f3fec53ed7408523e1f3f1!userid_type:int"
Host:localhost:8080
Origin:http://localhost:8080
Referer:http://localhost:8080/user/jz/
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.76 Safari/537.36
X-Requested-With:XMLHttpRequest
Form Dataview sourceview URL encoded
{"contact_id":4}:
Response Headersview source
Content-Length:13
Content-Type:application/json; charset=UTF-8
Date:Sat, 21 Sep 2013 22:40:49 GMT
Server:waitress
答案 0 :(得分:1)
尝试使用data: JSON.stringify({'contact_id' : '3'})
并查看是否有帮助。
对于xhr = True param,这是documentation所说的: 该值应为True或False。如果指定了此值并且为True,则WSGI环境必须拥有HTTP_X_REQUESTED_WITH(也称为X-Requested-With)标头,该标头具有值XMLHttpRequest,用于找到并调用可调用的关联视图。这对于检测从jQuery,Prototype和其他Javascript库发出的AJAX请求非常有用。
如果未指定xhr,则在决定是否调用相关视图可调用时,不会考虑HTTP_X_REQUESTED_WITH HTTP标头。
修改的 你还需要将id作为JSON传递吗?我已经有一段时间了,因为我在python / pyramid中工作过,但我认为现在通过request.POST.get('contact_id')尝试检索你的id的方法你应该尝试将它作为常规POST参数发布
因此,在$ .ajax()调用中删除dataType并尝试数据:{contact_id: '3'}
。
原因是您需要在请求中使用有效密钥才能通过request.POST检索它。 request.POST还要求您的内容类型设置为application / x-www-form-urlencoded。如果你需要通过request.POST检索JSON,请在json前面添加一个键,即:foo = {json here ..}