无法使用Python从AJAX获取数据

时间:2013-09-21 21:22:32

标签: jquery python ajax json pyramid

我无法使用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

1 个答案:

答案 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 ..}