0

我无法使用 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,因此它被设置为 default None

我做错了什么?以及如何获取contact_id要在服务器代码中使用的参数?此外,我是否需要xhr=True在我的view_config装饰器中拥有 - 当它存在时,我手动导航到ajax_contact我收到 404 的页面(这是预期的结果)?

谢谢你的帮助。

编辑 更多信息:

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
4

1 回答 1

1

试试看data: JSON.stringify({'contact_id' : '3'})是否有帮助。

至于 xhr=True 参数,这就是文档所说的:这个值应该是 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 参数发布.

所以删除 dataType 并尝试 data:{contact_id: '3'}在你的 $.ajax() 调用中。

这样做的原因是您的请求中需要一个有效的密钥,以便能够通过 request.POST 检索它。request.POST 还要求您的内容类型设置为 application/x-www-form-urlencoded。如果您需要通过 request.POST 检索 JSON,请在 json 前面添加一个键,即: foo = {json here..}

于 2013-09-21T22:20:01.883 回答