我有一些旧代码通过jQuery的post方法发出AJAX
POST请求,看起来像这样:
$.post("/foo/bar", requestData,
function(responseData)
{
//do stuff with response
}
requestData
只是具有一些基本字符串属性的javascript对象。
我正在移动我们的内容以使用Angular,并且我想用$ http.post代替此调用。我提出以下内容:
$http.post("/foo/bar", requestData).success(
function(responseData) {
//do stuff with response
}
});
当我这样做时,我从服务器收到500错误响应。使用Firebug,我发现这发送了如下请求体:
{"param1":"value1","param2":"value2","param3":"value3"}
成功的jQuery $.post
发送如下内容:
param1=value1¶m2=value2¶m3=value3
我要命中的端点期望请求参数而不是JSON。因此,我的问题是无论如何要告诉$http.post
发送JavaScript对象作为请求参数而不是JSON?是的,我知道我可以自己从对象构造字符串,但是我想知道Angular是否为此提供了开箱即用的功能。
我认为params
config参数在这里不起作用,因为它将字符串添加到url而不是正文中,但是要添加到Infeligo建议的内容中,这是默认转换的全局替代示例(使用jQuery
param作为转换示例数据到参数字符串)。
设置全局transformRequest函数:
var app = angular.module('myApp');
app.config(function ($httpProvider) {
$httpProvider.defaults.transformRequest = function(data){
if (data === undefined) {
return data;
}
return $.param(data);
}
});
这样,所有对$ http.post的调用都会自动将主体转换为jQuery $.post
调用所使用的相同参数格式。
请注意,您可能还希望按以下方式为每次调用或全局设置Content-Type标头:
$httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8';
每个调用的示例非全局transformRequest:
var transform = function(data){
return $.param(data);
}
$http.post("/foo/bar", requestData, {
headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'},
transformRequest: transform
}).success(function(responseData) {
//do stuff with response
});
但是,有没有一种方法可以使用$http.post()来实现这一点?我是否必须始终包含头部才能使其工作?我相信上面的内容类型指定了发送数据的格式,但是我可以将它作为javascript对象发送吗?
问题内容: 谁能告诉我以下语句为什么不将帖子数据发送到指定的URL?调用了url,但是在打印$ _POST时在服务器上- 我得到一个空数组。如果我在将消息添加到数据之前在控制台中打印消息-它显示正确的内容。 我也尝试过将数据作为字符串(具有相同的结果): 当我以以下格式使用它时,它似乎可以正常工作: 但是有没有办法用$ http.post()做到这一点- 我是否总是必须包含标头才能使其正常工作?我
首先,我不想在这个事务中与服务器交互。我正在使用FetchAPI发送请求,但在url中我想传递一个js文件。像这样的- 此外,如果有可能,我们可以只使用JS获取POST变量吗? 我知道这样做似乎没有任何意义。但我正在尝试一些东西,非常感谢任何帮助。
问题内容: 我想在过滤器/ servlet中拦截请求,并向其中添加一些参数。但是,该请求不会公开’setParameter’方法,并且该参数映射在被操纵时会抛出错误,表明已被锁定。有没有其他我可以尝试的方法? 问题答案: 子类化并覆盖方法。该类的描述为: 提供HttpServletRequest接口的便捷实现,希望希望使请求适应Servlet的开发人员可以将其子类化。 在过滤器中,将请求包装在子类
我试图做简单的超文本传输协议后请求使用以下代码:Golang代码从另一个SO后 它发送了两次http请求(我尝试了向自己的web服务和Firebase消息服务器发送)。有人知道怎么回事吗?非常感谢。 编辑忽略我,找出是AVG反病毒造成的问题。如果我这样做:然后按enter键一次,AVG会中断,说它已经扫描了它,然后让它运行。这会导致http调用两次。如果我在运行前禁用了防病毒软件,那么http请求
问题内容: 我正在使用HttpClient发出发布请求。我回到405方法不被允许。在提琴手中捕获轨迹时,它作为GET而不是POST发出! 我知道异步/等待问题。这是显示问题的简化示例。 是否存在某种可能会影响此的web.config或machine.config设置?其他请求(通过RestSharp发送)正确发送了帖子 这是提琴手捕获的东西。在提琴手中运行跟踪也会返回405(如预期)。手动将其切换