2014-04-01 88 views
2

我试图将用户名和密码发布到api,但看起来不像jquery post那么简单。我一直在制造这个400错误。AngularJs - JSON post

代码:

 $http({ 
      method: 'POST', 
      url: apiLink + '/general/dologin.json', 
      data: {"username":"someuser","password": "somepass"} 
     }).success(function(response) { 
      console.log(response) 
     }).error(function(response){ 
      console.log(response) 
     }); 

但如果我加入这一行:

$http.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded"; 

和更改数据:

data: "username=someuser&password=somepass" 

它的工作原理。但事情是,我必须使用json。从谷歌浏览器

和详细信息:

Request URL:http://coldbox.abak.si:8080/general/dologin.json 
Request Method:POST 
Status Code:400 Bad Request 
Request Headersview source 
Accept:application/json, text/plain, */* 
Accept-Encoding:gzip,deflate,sdch 
Accept-Language:en,sl;q=0.8,en-GB;q=0.6 
Cache-Control:max-age=0 
Connection:keep-alive 
Content-Length:57 
Content-Type:application/x-www-form-urlencoded 
Host:coldbox.abak.si:8080 
Origin:http://localhost:8888 
Referer:http://localhost:8888/ 
User-Agent:Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)  Chrome/33.0.1750.154 Safari/537.36 
Form Dataview sourceview URL encoded 
{"username":"someuser","password":"somepass"}: 
Response Headersview source 
Access-Control-Allow-Origin:* 
Connection:close 
Content-Length:49 
Content-Type:application/json;charset=utf-8 
Date:Wed, 02 Apr 2014 07:50:00 GMT 
Server:Apache-Coyote/1.1 
Set-Cookie:cfid=b5bbcbe2-e2df-4eef-923f-d7d13e5aea42;Path=/;Expires=Thu, 31-Mar-2044  15:41:30 GMT;HTTPOnly 
Set-Cookie:cftoken=0;Path=/;Expires=Thu, 31-Mar-2044 15:41:30 GMT;HTTPOnly 
+0

如果您已经解决了您的问题;你有问题吗?您可以设置一个转换函数,因此您不必担心自动执行转换。更多信息请点击http://www.jeffryhouser.com/index.cfm/2013/10/1/Calling-a-ColdFusion-CFC-from-AngularJS并在这里http://victorblog.com/2012/12/20/ make-angularjs-http-service-behave-like-jquery-ajax/ – JeffryHouser

+0

我的猜测是这是一个服务器端问题。角码看起来正确。也许服务器没有配置为处理json参数? – alexsanford1

回答

2

我敢说这是一个CORS问题,如果您的应用程序的角度上没有完全相同的域名哪个你可以发布您的JSON服务器。

看到这个答案的详细信息:AngularJS performs an OPTIONS HTTP request for a cross-origin resource

+0

好的,没错,api就在另一台服务器上。 – Clem

+2

基本上每个发往另一台服务器的POST都会发送,而OPTIONS请求首先必须响应正确的头文件。如果它没有响应,浏览器将永远不会发送实际的POST。但请阅读其他答案的细节。 –

0

尝试 数据:{用户名:指“someUser”,密码:“somepass”} 周围没有用户名和密码的报价,看看是否有差别。

+0

还是一样的:/ – Clem

0

当您将数据分配给数据时,您将必须使用JSON.stringify转换数据