我有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 =密码和Content-Type application / x-www-form-urlencoded以便这就是我使用$ http.post([settings])结构的原因。
有人可以解释一下它们是如何工作的,以及为什么我会收到这些错误?也许我错误地使用了post方法,或者我需要声明一些我不知道的东西?
答案 0 :(得分:0)
您未正确使用$http.post。这个方法需要3个参数,而不是像这样的一个对象:
return $http.post(
CHEAPWATCHER.config.domain + 'api/Authenticate',
transformDataToUrlEncoded(data),
{contentType: 'application/x-www-form-urlencoded; charset=UTF-8'}
});
如你所见,我放了一个transformDataToUrlEncoded。由于角度仅在JSON中序列化,因此他不会将javascript对象转换为urlencoded。
来自主题的旧答案
$ http.post返回一个可以使用.then的承诺。 Angular promise是可以接受的,这意味着你可以一次又一次地执行.then()。then()。then(),以便有多层处理结果。当然,你经常不需要这样。我会说几乎从不超过2级:
我并不是真的了解JQuery,但我认为它不具有角度可链接性。
你可能可以做到
.done().fail()
因为.done返回可以执行.fail()而不是
的对象.done().done().
因为.done返回的对象没有.done()方法。
最后.fail()是终止点:它什么都不返回,所以你返回空值。
答案 1 :(得分:0)
因此经过大量的谷歌和思考后,我来到解决方案,也许有一天它可能对某人有所帮助。 insted $ html.post()和$ .ajax()方法我将我的数据转换为x-www-form-urlencoded为@Walfrat和@TheMadDeveloper建议所以我的代码现在可以完美地运行如下:
return $http({
method: 'POST',
url: CHEAPWATCHER.config.domain + 'api/Authenticate',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
transformRequest: function (obj) {
var str = [];
for (var p in obj)
str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
return str.join("&");
},
data: data
}).success(function (result) {
console.log(result);
});
谢谢大家的帮助!!!