Angularjs - $ http帖子上的500(内部服务器错误)

时间:2016-05-19 06:32:05

标签: angularjs node.js ionic-framework gulp

我是Ionic和有角度的新手。我正在使用angular.js构建带有离子框架的样本。我想通过$ http post方法调用WebApi。我检查了这个(ionic-proxy-example)解决方案,我正在尝试使用我的api实现相同的解决方案。当我在我的示例项目中调用上面示例中提供的api时,我得到了记录,但它不能与我的api一起使用。它会引发500内部错误。

这是我的app.js

angular.module('myApp', ['myApp.controllers', 'myApp.services'])
.constant('ApiEndpoint', {url: 'http://localhost:8100/api'})

Services.js

angular.module('myApp.services', [])
.factory('Api', function($http, $q, ApiEndpoint) {


console.log('ApiEndpoint', ApiEndpoint)

 var getApiData = function() {
var q = $q.defer();

        var data = {
            Gameweek_ID: '179',
            Vender_ID: '1',
            Language:'en'
        };

         var config = {
            headers : {
                "Content-Type": "application/json; charset = utf-8;"
            }
        };

        $http.post(ApiEndpoint.url, data, config)
        .success(function (data, status, headers, config) {
           // $scope.PostDataResponse = data;
              alert('success');
              console.debug("response :" + data);
              q.resolve(data);
        })
        .error(function (data, status, header, config) {
            // $scope.ResponseDetails = "Data: " + data +
              alert('error');
              console.debug("error :" + data);
              q.reject(data);
        });


return q.promise;


 }

 return {getApiData: getApiData};
})

controllers.js

angular.module('myApp.controllers', [])
.controller('Hello', function($scope, Api) {
 $scope.employees = null;
Api.getApiData()
.then(function(result) 
{console.log("result is here");
jsonresponse = result.data;
$scope.employees = jsonresponse;}
)

});

和Ionic.Project文件

{


"name": "Multilingual",
"app_id": "4b076e44",
"proxies": [
{
  "path": "/api",
  "proxyUrl": ""
}
]}

我试图理解这个问题并检查了多个方法来调用api。令人惊讶的是,它适用于没有任何CORS错误的ajax post调用。当我使用Angular时,我试图通过$ http post完成此操作。我觉得这是一个小问题,但我无法搞清楚。将不胜感激的解决方案。谢谢。

3 个答案:

答案 0 :(得分:2)

你已经将内容类型设置为json,因此服务器期望一个json字符串,但是当你通过一个对象发送错误时,它没有收到格式正确的json字符串。

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> <xsl:output indent="yes"/> <xsl:template match="@*|node()" mode="#all"> <xsl:copy> <xsl:apply-templates select="@*|node()" mode="#current"/> </xsl:copy> </xsl:template> <xsl:template match="letter"> <xsl:copy> <xsl:apply-templates select="@*"/> <xsl:variable name="letter-with-line-breaks"> <xsl:apply-templates select="." mode="breaks"/> </xsl:variable> <xsl:for-each-group select="$letter-with-line-breaks/letter/node()" group-starting-with="br"> <p> <xsl:apply-templates select="current-group()[not(self::br)]"/> </p> </xsl:for-each-group> </xsl:copy> </xsl:template> <xsl:template match="letter//text()" mode="breaks"> <xsl:analyze-string select="." regex="&#10;&#10;"> <xsl:matching-substring> <br/> </xsl:matching-substring> <xsl:non-matching-substring> <xsl:value-of select="."/> </xsl:non-matching-substring> </xsl:analyze-string> </xsl:template> </xsl:transform> 将其更改为$http.post(ApiEndpoint.url, data, config)

如果不起作用,请将您的内容类型更改为$http.post(ApiEndpoint.url, JSON.stringify(data), config)并将此行application/x-www-form-urlencoded更新为$http.post(ApiEndpoint.url, data, config),不要忘记注入$http.post(ApiEndpoint.url, $httpParamSerializer(data), config)功能。

答案 1 :(得分:0)

问题是您发送了一个包含$http.post请求的POST而非$http.get

的GET请求

答案 2 :(得分:0)

尝试如下 -

$http({
            url: ApiEndpoint.url,
            method: "POST",
            data: data,
            headers: {'Content-Type': 'application/x-www-form-urlencoded'}
        }).Success(..rest code goes here..)

在WebAPI中,当我们在POST方法中传递多个对象时,我们得到500个内部错误,因此我们在这种情况下使用ViewModel(谈论asp.net MVC)。