HTTP POST调用未选择传递给body的最新值

时间:2016-12-20 08:03:13

标签: javascript angularjs http-post

我有一个网络服务来发送邮件,该邮件需要字段作为请求正文的一部分。

以下代码我用来发送邮件到两个电子邮件ID。

var mailTo=["abcd@pqrs.com","lmno@pqrs.com"]; 
var options = {
                url:'www.test.com/feedback',
                from:'dummy@pqrs.com'
              }
 _.each(mailTo, function(value) {
    console.log("Mail to value:",value);
    options.body.to = value;
    console.log("Mail to json:",options.body.to);
    $http.post(options.url, options.body).success(function(data) {

    if (data.status == 'success') {
       console.log("Success");
    } else {
       console.log("Failure");
    }
});

以上代码应将邮件发送到2个不同的邮件ID。但是这段代码将邮件发送到第二个mailID两次。记录器语句“Mail to value:”和“Mail to json:”记录正确的邮件ID。当我检查网络活动时, options.body.to 对于两个请求都是相同的。

这段代码出了什么问题?

4 个答案:

答案 0 :(得分:3)

你应该确保:

  

$ http.post是异步的。

您将options变量声明为全局变量。因此,当第二次执行post请求时,options值会更改 options.body.to = value;

您应该将options变量声明为局部变量。

答案 1 :(得分:1)

您不应声明全局变量而应声明局部变量。

答案 2 :(得分:1)

你不应该声明全局变量而是声明局部变量 试试这个

    <html>
    <head>
    <script src="jquery.min.js"></script>
    <script>
    var mailTo=["abcd@pqrs.com","lmno@pqrs.com"]; 
     $.each(mailTo, function(value) {
        alert(mailTo[value]);
    });
    </script>
    </head>
    </html>

答案 3 :(得分:0)

以下是使用jquery

进行此操作的方法
<html>
<head>
<script src="jquery.min.js"></script>
<script>
var mailTo=["abcd@pqrs.com","lmno@pqrs.com"]; 
 $.each(mailTo, function(value) {
    alert(mailTo[value]);
});
</script>
</head>
</html>