Angular $ HTTP响应SyntaxError:意外的令牌E

时间:2015-11-26 18:26:14

标签: javascript angularjs rest syntax error-handling

使用Angular $ HTTP服务进行简单的POST调用:    authService.login = function(用户名,密码){             var credentials ='username ='+ username +'&' +'password ='+密码;

        return $http({
            method: 'POST',
            url: href,
            headers: {'accept': acceptValue, 'content-type': contentType},
            data: credentials
        }).then(onSuccess, onError);
    };

无法获取错误状态,而是获得SyntaxError:Unexpected token E. 控制台首先显示状态401,并在解析错误后立即显示。 想知道它在幕后做了什么,它试图解析什么,以及为什么我无法让error.status工作。

2 个答案:

答案 0 :(得分:0)

问题可能在于您如何序列化数据。您可以尝试将它们作为对象直接传递到data,而不是自己构建字符串:

data: {username: username, password: password}

Angular应该自己序列化数据对象中的信息。

如果这不起作用,Angular还有一个内置的替代品,它的默认序列化程序模仿jQuery中的序列化程序。它上面的文档是Ember service。使用此方法的请求类似于:

            $http({
                url: "/auth/login",
                method: "POST",
                headers: {"Content-Type": "application/x-www-form-urlencoded"},
                data: $httpParamSerializerJQLike({
                    email: email,
                    password: password
                })
            })

如果选择此选项,请不要忘记将$httpParamSerializerJQLike作为依赖项注入。

答案 1 :(得分:0)

您的请求似乎已正确发送,并且您收到了回复。

我尝试使用RESTful服务返回401状态代码。这是我的JavaScript代码:

var href = 'https://contactsapi.apispark.net/v1/contacts/';
var acceptValue = 'application/json';
var contentType = 'application/json';
var credentials = {}; //'something';

function onSuccess(data, status, headers, config) {

}

function onError(data, status, headers, config) {
  console.log('data = '+JSON.stringify(response, null, 2));
}

$http({
    method: 'POST',
    url: href,
    headers: {'accept': acceptValue, 'content-type': contentType},
    data: credentials
    }).then(onSuccess, onError);

响应对象在我的例子中包含以下内容:

{
  "data": {
    "code": 401,
    "contactEmail": null,
    "description": "The request requires user authentication",
    "homeRef": "/",
    "reasonPhrase": "Unauthorized",
    "uri": "http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.2"
  },
  "status": 401,
  "config": {
    "method": "POST",
    "transformRequest": [
      null
    ],
    "transformResponse": [
      null
    ],
    "url": "http://localhost:8182/contacts/",
    "headers": {
      "accept": "application/json",
      "content-type": "application/json"
    },
    "data": {}
  },
  "statusText": "Unauthorized"
}

可以帮助您查看响应内容(标头/有效负载)。例如,如果有效负载是JSON,则为Content-Type标头的值。也许答案的Content-Type与实际内容之间存在差距。例如,您收到的内容类型为application/json的纯文本内容。

我做了一个测试来模拟这种情况(内容类型为application/json的XML内容),我有以下错误:

SyntaxError: Unexpected token <
  at Object.parse (native)
  at vc (https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js:15:480)
  at Zb (https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js:82:229)
  at https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js:83:143
  at m (https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js:7:322)
  at dd (https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js:83:125)
  at d (https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js:84:380)
  at https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js:119:113
  at n.$eval (https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js:133:221)
  at n.$digest (https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js:130:233)

Angular尝试解析JSON内容,但由于它格式不正确,所以不能并且抛出错误。

它似乎与您的错误类似。所以我认为问题不在你的Angular应用程序中,而是在服务器中......

希望它可以帮到你, 亨利