【发布时间】:2016-07-03 11:21:07
【问题描述】:
我有 2 个返回语句:
return $http.post({
url: CHEAPWATCHER.config.domain + 'api/Authenticate',
contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
data: data
});
return $.ajax({
type: 'POST',
url: CHEAPWATCHER.config.domain + 'api/Authenticate',
data: data
}).done(function (result) {
console.log('logged successfuly');
}).fail(function (result) {
console.log('loging failed');
});
还有我使用 API 方法的 background.js 函数:
// REGISTER API COMMAND LISTENER
chrome.runtime.onConnect.addListener(function (port) {
port.onMessage.addListener(function (request, portInfo) {
// Globally accessible function to execure API calls
CHEAPWATCHER.executeApiCall = function (request, senderId) {
var originalRequestMethod = request.method;
//Dinamically call API method
CHEAPWATCHER.api[request.method](request, senderId).then(function (response) {
port.postMessage(response);
}, function (error) {
port.postMessage(error);
});
};
CHEAPWATCHER.executeApiCall(request, request.sender);
});
});
当然,当我运行我的 chrome 扩展程序时,我会评论其中一个,但关键是它们都返回相同的对象类型 jqXHR,如果我使用的是 $http.post,它会给我以下错误:
事件处理程序中的错误(未知):TypeError:无法读取 null 的属性“错误”
和
POST chrome-extension://cmakfpdagfeiefcmmpmhjrtyhonmgnbi/background/[object%20Object] net::ERR_FILE_NOT_FOUND
当我使用 $.ajax 时,它可以工作,我得到了我需要的令牌,但它给了我这个错误:
事件处理程序中的错误(未知):TypeError:无法读取 null 的属性“错误”
之后我的扩展程序无法继续工作。昨天我问为什么 $.ajax 给了我这个错误,我得到了答案,因为我不能返回 jqXHR 类型,但是如果我使用的是
return $http.post(CHEAPWATCHER.config.domain + 'api/Authenticate', data);
一切都很好,只是 post 方法需要我给他 grant_type=password 和 Content-Type application/x-www-form-urlencoded 所以这就是我使用 $http.post([settings]) 结构的原因。
谁能解释一下它们是如何工作的以及为什么我会收到这些错误?也许我使用的 post 方法不正确,或者我需要声明更多我不知道的东西?
【问题讨论】:
-
@Barmar 抱歉忘了提到我正在使用 Angular。所以 $http 服务是一个核心 Angular 服务,它通过浏览器的 XMLHttpRequest 对象或 JSONP 促进与远程 HTTP 服务器的通信。
-
您使用的是哪个版本的 jQuery?
-
@AhsanAyaz jQuery 2.2.1 版本
-
这些响应(承诺)返回到哪里? “Cannot read property 'error' of null”表明,在某些时候,someObject.error 被引用。
-
“chrome-extension://cmakfpdagfeiefcmmpmhjrtyhonmgnbi/background/[object%20Object] ”似乎非常可疑,因为它看起来像是一个对象试图添加到一个字符串(给定 [object Object]序列化)-尽管这与您遇到的问题不太相关。
标签: javascript jquery angularjs ajax google-chrome