AngularJS将JSON发布到Django REST API

AngularJS将JSON发布到Django REST API,django,angularjs,restangular,Django,Angularjs,Restangular,我正在用AngularJS和Django制作的外部API构建一个应用程序 对于API调用,我使用restanglar(但事实并非如此,因为即使使用$http,我也会得到相同的结果) 我的post呼叫的默认内容类型是: $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; 这样做只是为了在登录win OAuth2时发送凭据: var data = { grant

我正在用AngularJS和Django制作的外部API构建一个应用程序

对于API调用,我使用restanglar(但事实并非如此,因为即使使用$http,我也会得到相同的结果)

我的post呼叫的默认内容类型是:

$httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
这样做只是为了在登录win OAuth2时发送凭据:

var data = {
    grant_type: 'password',
    client_id: clientID,
    client_secret: clientSecret,
    username: username,
    password: password
};

$http.post('http://server.com/api/oauth2/access_token/', data);
GET使用默认的AngularJS配置(我猜是application/json)完成

到目前为止一切都很好直到。。。我发出POST请求并发送大型JSON对象

上面的配置不起作用,所以我将这些POST请求更改为application/json,并得到错误响应:

400: JSON parse error - No JSON object could be decoded
仅使用jQuery也尝试了同样的方法-虽然我不得不使用JSON.strigify和错误调试Chrome请求负载,但使用jQuery看起来像是一个合适的对象,而使用AngularJS看起来像这样:

type=Feature&geometry=%5Bobject%20Object%5D&properties=%5Bobject%20Object%5D
(是的,顺便说一下,我正在发送一个有效的GeoJSON对象)

因此,我认为JSON.stringify可能与此有关,但在将其应用于我的对象之后,AngularJS的请求负载变得一团糟:

0=%7B&1=%22&2=t&3=y&4=p&5=e&6=%22&7=%3A&8=%22&9=F&10=e&11=a&12=t&13=u&14=r&15=e&16=%22&17=%2C&18=%22&19=g&20=e&21=o&22=m&23=e&24=t&25=r&26=y&27=%22&28=%3A&29=%7B&30=%22&31=t&32=y&33=p&34=e&35=%22&36=%3A&37=%22&38=P&39=o&40=i&41=n&42=t&43=%22&44=%2C&45=%22&46=c&47=o&48=o&49=r&50=d&51=i&52=n&53=a&54=t&55=e&56=s&57=%22&58=%3A&59=%5B&60=1&61=9&62=.&63=0&64=8&65=3&66=2&67=4&68=1&69=2&70=2&71=4&72=2&73=8&74=8&75=9&76=%2C&77=5&78=0&79=.&80=2&81=4&82=2&83=4&84=0&85=2&86=0&87=7&88=2&89=3&90=6&91=8&92=9&93=%5D&94=%7D&95=%2C&96=%22&97=p&98=r&99=o&100=p&101=e&102=r&103=t&104=i&105=e&106=s&107=%22&108=%3A&109=%7B&110=%22&111=c&112=o&113=n&114=t&115=r&116=i&117=b&118=u&119=t&120=i&121=o&122=n&123=t&124=y&125=p&126=e&127=%22&128=%3A&129=1&130=2&131=1&132=4&133=5&134=%2C&135=%22&136=l&137=o&138=c&139=a&140=t&141=i&142=o&143=n&144=%22&145=%3A&146=%7B&147=%22&148=n&149=a&150=m&151=e&152=%22&153=%3A&154=%22&155=D&156=a&157=n&158='&159=s&160=%20&161=H&162=o&163=u&164=s&165=e&166=%22&167=%2C&168=%22&169=d&170=e&171=s&172=c&173=r&174=i&175=p&176=t&177=i&178=o&179=n&180=%22&181=%3A&182=n&183=u&184=l&185=l&186=%2C&187=%22&188=s&189=t&190=a&191=t&192=u&193=s&194=%22&195=%3A&196=n&197=u&198=l&199=l&200=%2C&201=%22&202=c&203=r&204=e&205=a&206=t&207=e&208=d&209=_&210=a&211=t&212=%22&213=%3A&214=%22&215=2&216=0&217=1&218=4&219=-&220=0&221=4&222=-&223=3&224=0&225=T&226=1&227=0&228=%3A&229=2&230=4&231=%3A&232=5&233=8&234=.&235=9&236=3&237=7&238=Z&239=%22&240=%2C&241=%22&242=i&243=d&244=%22&245=%3A&246=4&247=5&248=%7D&249=%7D&250=%7D
有什么帮助吗?我做错了什么?或者它与Django API有关?我们应该改变一下吗

解决了的 这个问题是由serialiser(我对jQuery的$.param的解释)引起的。显然,我需要这个来发送OAuth2的凭据,但不需要任何其他POST请求


尽管我仍然不知道为什么会这样。

包括jquery并尝试一下这个

$http({
    method: 'POST', 
    url: 'http://server.com/api/oauth2/access_token/', 
    data: $.param(data)
});
试试这个

   var data = {
        grant_type: 'password',
        client_id: clientID,
        client_secret: clientSecret,
        username: username,
        password: password
    };

    $http.post('http://server.com/api/oauth2/access_token/', angular.toJson(data));

您是否在浏览器开发人员工具中检查了发送给Django的内容?因此,这是作为字符串类型发送的=Feature&geometry=%5Bobject%20Object%5D&properties=%5Bobject%20Object%5D虽然在使用jQuery时,响应负载是一个对象。嗯,在使用AngularJS时,我不想使用jQuery,另外,$.param也是我出错的原因(它已经作为已解决的问题发布了)。哦,很抱歉,我在发布答案后看到了已解决的编辑:(。