停止jQuery.ajax()从传递参数“_json”作为主参数名称?

时间:2012-03-21 22:53:35

标签: javascript jquery ajax

假设我们使用jQuery.ajax()来使用两个参数来发布数据, game_id player_id

当我们使用jQuery.ajax()时,服务器接收如下参数:{"_json"=>"game_id=4f6a593a8cb45b16c0000491&player_id=4f68ed4b8cb45b16c0000111"}

我们希望服务器接收如下参数:

{"game_id=4f6a593a8cb45b16c0000491&player_id=4f68ed4b8cb45b16c0000111"}

基本上,ajax()使“_json”成为所有参数的主密钥。有没有办法防止这种情况,或者我们做错了什么?

以下是一些具体代码:

    $.ajax({
        type: 'POST',  
        url: UPDATE_GAME_URL,  
        data: { "game_id" : game_id,
                "player_id" : get_player_id(),
                "turn_set" : JSON.stringify(turn_set) },
        contentType: 'application/json; charset=utf-8',
        dataType: 'json'
    });

谢谢!

2 个答案:

答案 0 :(得分:1)

$.ajax({
    type: 'POST',  
    url: UPDATE_GAME_URL,  
    data: { "game_id" : game_id,
            "player_id" : get_player_id(),
            "turn_set" : turn_set },
    contentType: 'application/json; charset=utf-8',
    dataType: 'json'
});

您不需要对turn_set进行字符串化,jQuery会为您完成。

答案 1 :(得分:1)

jQuery不包含任何带有json_字段前缀的代码,因此问题出在其他地方。

但是,您需要删除contentType: 'application/json; charset=utf-8'以确保服务器正确解析POST数据 - 毕竟您没有发布JSON。
如果您的服务器 期望JSON有效负载(根据您希望接收它的字符串不是!),您必须使用data: JSON.stringify({...})来确保实际发送JSON字符串而不是形式编码的键/值对。