【问题标题】:Use a FOR loop within an AJAX call在 AJAX 调用中使用 FOR 循环
【发布时间】:2012-07-11 15:41:34
【问题描述】:

所以,我要做的是发送一个 AJAX 请求,但是正如您所见,我的表单中有很多字段,并且我使用数组进行验证,我想使用相同的数组,传递要通过 AJAX 发送的值:

我从来没有在 JS 中使用过 for 循环,但无论如何似乎很熟悉。

循环的方式,显然行不通:

for (i=0;i<required.length;i++) {
        var required[i] = $('#'+required[i]).attr('value');

这将创建我想要的变量,如何使用它们?

希望你们能帮助我!!!非常感谢!

required = ['nome','sobrenome','endereco','codigopostal','localidade','telemovel','email','codigopostal2','localidade2','endereco2','nif','entidade','codigopostal3','localidade3','endereco3','nserie','modelo'];              


function ajaxrequest() {
    for (i = 0; i < required.length; i++) {
        var required[i] = $('#' + required[i]).attr('value');
        var dataString = 'nome=' + required[0] + '&sobrenome=' + required[1];
    }
    $.ajax({
        type: "POST",
        url: "ajaxload/como.php",
        data: dataString,
        success: function() {
            $(".agendarleft").html("SUCESS");
        }
    });

【问题讨论】:

  • 如何使用数组创建“for”循环?
  • 是的,不是很清楚。尝试破译这个;您想知道如何将您放入 required 数组的值作为键/值对传递到您的 POST 请求中,就像您提交表单一样?
  • @Souza 您已经创建了一个 for 循环,据我所知,它应该遍历 required 中的每个值并从具有这些 ID 的字段中获取值。你没有让自己很好理解。
  • @Thor84no 查看 var dataString,你认为输出正确吗?
  • @Souza 我不知道你会期待什么,所以我不能告诉你。此外,我现在没有任何地方可以执行此代码,但我想说你没有做你想做的事。它看起来您打算将 dataString 包含 'nome=&sobrenome=',但为此您应该将它放在 之后for 循环,不在里面。您还应该在for 循环之外定义值数组并将其填充到其中。哦,我会将值存储在与您拥有 ID 的数组不同的数组中,而不是覆盖它。

标签: javascript ajax jquery loops for-loop


【解决方案1】:

为帮助确保传递适当的元素 ID 和值,请循环遍历各种元素并首先将数据添加到对象。

jQuery:

required = ['nome', 'sobrenome', 'endereco', 'codigopostal', 'localidade', 'telemovel', 'email', 'codigopostal2', 'localidade2', 'endereco2', 'nif', 'entidade', 'codigopostal3', 'localidade3', 'endereco3', 'nserie', 'modelo'];

function ajaxrequest() {
    var params = {}; // initialize object

    //loop through input array
    for (var i=0; i < required.length; i++) {             
        // set the key/property (input element) for your object
        var ele = required[i]; 
        // add the property to the object and set the value
        params[ele] = $('#' + ele).val(); 
    }
    $.ajax({
        type: "POST",
        url: "ajaxload/como.php",
        data: params,
        success: function() {
            $(".agendarleft").html("SUCESS");
        }
    });
}

演示: http://jsfiddle.net/kPR69/

【讨论】:

  • 更改了这一行:params[i] = ele + '=' + $('#' + ele).attr('value'); 其他一切都是完美的!!!!你就是那个人,谢谢!
【解决方案2】:

更简洁的方法是在您希望保存的每个字段上放置一个类,并使用它来遍历它们。然后你也不需要指定输入名称,你可以直接向服务发送一个 json 对象;

var obj = {};

$('.save').each(function () {

       var key = $(this).attr('id');
       var val = $(this).val();

       if (typeof (val) == "undefined")
           val = "''"

       obj[key] = val;
}

然后将 obj 作为 AJAX 调用的数据属性发送....

【讨论】:

    【解决方案3】:

    您的代码存在一些问题。 'required' 被覆盖,并且也在循环内重新声明。

    我建议使用预先编写的库,我在下面列出了一些。

    http://jquery.malsup.com/form/#validation

    https://github.com/posabsolute/jQuery-Validation-Engine

    否则跟随会让你接近。您可能需要将数组转换为字符串。

    var required = ['nome','sobrenome'];              
    
    function ajaxrequest() {
      var values;
      for (i = 0; i < required.length; i++) {
        var values[i] = $('#' + required[i]).attr('value');
      }
      $.ajax({
        type: "POST",
        url: "ajaxload/como.php",
        data: values,
        success: function() {
            $(".agendarleft").html("SUCESS");
        }
    });
    

    }

    【讨论】:

      猜你喜欢
      • 2012-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-31
      相关资源
      最近更新 更多