在下面的代码中,AngularJS $http方法调用URL,并将xsrf对象作为"请求有效负载"提交(如Chrome调试器网络选项卡中所述).jQuery $.ajax方法执行相同的调用,但将xsrf提交为"Form Data".
如何让AngularJS将xsrf作为表单数据而不是请求有效负载提交?
var url = 'http://somewhere.com/';
var xsrf = {fkey: 'xsrf key'};
$http({
method: 'POST',
url: url,
data: xsrf
}).success(function () {});
$.ajax({
type: 'POST',
url: url,
data: xsrf,
dataType: 'json',
success: function() {}
});
Run Code Online (Sandbox Code Playgroud) 谁能告诉我为什么以下声明不会将发布数据发送到指定的网址?当我打印$ _POST时,在服务器上调用url - 我得到一个空数组.如果我在将数据添加到数据之前在控制台中打印消息 - 它会显示正确的内容.
$http.post('request-url', { 'message' : message });
Run Code Online (Sandbox Code Playgroud)
我也尝试将数据作为字符串(具有相同的结果):
$http.post('request-url', "message=" + message);
Run Code Online (Sandbox Code Playgroud)
当我以下列格式使用它时它似乎正在工作:
$http({
method: 'POST',
url: 'request-url',
data: "message=" + message,
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
});
Run Code Online (Sandbox Code Playgroud)
但有没有办法用$ http.post()来做 - 并且我总是必须包含标题才能使它工作?我相信上面的内容类型是指定发送数据的格式,但我可以将其作为javascript对象发送吗?
我想使用angularjs HTTP post service发送多个参数.
这是客户端代码:
$http.post("http://localhost:53263/api/Products/", [$scope.product, $scope.product2]).
then(function (data, status, headers, config) { alert("success") },
function (data, status, headers, config) { alert("error") });
Run Code Online (Sandbox Code Playgroud)
这是服务器端代码:
// POST api/<controller>
public void Post([FromBody]Product product,[FromBody]Product product2)
{
var productRepository = new ProductRepository();
var newProduct = productRepository.Save(product);
}
Run Code Online (Sandbox Code Playgroud)
但是当我发帖时我得到了错误.知道我做错了什么吗?
我在Azure中托管了一个非常简单的.NET Web API,它有两个非常简单的方法:
[EnableCors(origins: "http://simpleapiearl.azurewebsites.net", headers: "*", methods: "*")]
public class EnvelopesController : ApiController {
// GET: api/Envelopes
public IEnumerable<string> Get() {
return new string[] { "value1", "value2" };
}
// POST: api/Envelopes
public string Post([FromBody]Envelope env) {
return "rval: " + env + " (and my addition to env)";
}
}
Run Code Online (Sandbox Code Playgroud)
我创建了一个简单的插件来调用这些方法.在我的AngularJS代码中,我正在进行两个非常简单的$ http调用.GET工作正常.然而,POST总是返回"400(错误请求)",紧接着在我的WebStorm控制台中"XMLHttpRequestion无法加载......无效的HTTP状态代码400".
任何和所有建议赞赏!
编辑!!
您好,感谢非常快速的回复.我刚刚意识到我忘了添加一些非常相关的细节.
我的POST方法的参数是我称之为Envelope的对象,它包含两个属性:listingId (int)和Description (string).当我添加urlencoded的Content-Type标头,并'{"listingId":1234, "Description":"some description"}'作为我的POST数据传递时,我在服务器上的POST方法中的env参数是NULL(也就是说,它似乎无法解析我提供的JSON).对不起,这是原始帖子中省略的.
我有一个带有一些angularjs验证的Raw表单,
<form name = "sform" novalidate="true">
<table border="0">
<tr>
<td>
First name:
</td>
<td>
<input type="text" name="fname" ng-model="fname" placeholder="First Name" required="true" ng-pattern="/^[A-Za-z]*$/">
</td>
<td ng-show="sform.fname.$invalid && !sform.fname.$pristine" class="help-block">wrong name </td>
</tr>
<tr>
<td>
Last Name:
</td>
<td>
<input type="text" ng-model="lname" placeholder="last Name" required="true" ng-pattern="/^[A-Za-z]*$/">
</td>
<td ng-show= "sform.lname.$invalid && !sform.lname.$pristine" class="help-block">wrong Last name </td>
</tr>
<tr>
<td>
Email:
</td>
<td>
<input type="email" ng-model="email" placeholder="email" required="true">
</td>
<td ng-show="sform.email.$invalid && !sform.email.$pristine" class="help-block">wrong Email </td>
</tr>
<tr>
<td>
<button type="submit" ng-disabled="sform.$invalid" ng-click …Run Code Online (Sandbox Code Playgroud) 我有一个要通过url传递的对象-类似于
$location.search(myObject)
Run Code Online (Sandbox Code Playgroud)
但是,当该对象变成对象数组时,我很难将其到达那里。我想知道如何放置一个大对象(现在是一个对象数组,我不知道是否需要更改),然后将其拉回到带有
$location.search()
Run Code Online (Sandbox Code Playgroud)
如果我的对象只是1个小对象,则此方法效果很好,现在它是一个内部具有级别的对象数组
var testIt = [{
"module1" :
[
{
"name1" : ["option1", "option2", "option3"]
},
{
"name2" : ["option1", "option2", "option3"]
}
]
},
{
"module2" :
[
{
"name3" : ["option1", "option2", "option3"]
},
{
"name4" : ["option1", "option2", "option3"]
}
]
}];
$location.search(testIt);
Run Code Online (Sandbox Code Playgroud)
我该如何处理这样的事情(如果URL现在很大,就可以了,但是如果有一种方法可以缩小它,那就更好了!)
谢谢!
如何在不使用$.paramjquery的情况下序列化对象?
我想要下面的对象:
var user = {username: 'ronald.araujo', password: '123456',};
Run Code Online (Sandbox Code Playgroud)
有以下输出:
username=ronald.araujo&password=123456
Run Code Online (Sandbox Code Playgroud)
有什么建议?记住我会使用Angularjs或纯Javascript来做到这一点.
编辑:
我使用动词"save"($ resource)angularjs.我怎么能设置标题"application/x-www-form-urlencoded"并序列化?