带有循环和字符串选择器的未定义 ajax 帖子

Posted

技术标签:

【中文标题】带有循环和字符串选择器的未定义 ajax 帖子【英文标题】:Undefined ajax post with for cycle and string selectors 【发布时间】:2013-10-11 10:32:59 【问题描述】:

我是 jquery/ajax 菜鸟 :)

我想出了这个:

$(function()   
  $("#moreAdd").click(function()   
    var dataString = [];
    var selector = '#repeat0';
    var row;
    for(var i=0;$(selector).length != 0;i++)
        row = [];
        selector = '#repeat' + i;
        row.push($(selector).val());
        selector = '#distance' + i;
        row.push($(selector).val());
        selector = '#style' + i;
        row.push($(selector).val());
        selector = '#change' + i;
        row.push($(selector).val());
        selector = '#time' + i;
        row.push($(selector).val());
        dataString.push(row);

        selector = '#repeat' + (i+1); //to check it's finished the for
    


    $.ajax(  
        type: "POST",  
        url: "/index.php/trainings/showAdd",
        data: dataString,
        dataType: 'json',
        success: function(data)   
            $("div#addModalBody").html(data.html);
          
    );
    return false;
  );  
); 

但我总是以空帖子告终。我认为选择器不能正常工作我可以创建一个字符串然后使用该字符串按 id 选择吗? 如果不是这样的话,如果有人能告诉我我哪里错了..

谢谢, 詹姆斯

【问题讨论】:

showAdd 是什么样的? 您正在尝试发送一个没有任何参数名称的数组 预期的参数名称是什么...... 更精确一点的萤火虫将 POST 显示为“未定义” 所以你认为我应该做一些类似 dataString[i].push(row);? 【参考方案1】:

我可以创建一个字符串,然后使用该字符串按 id 选择吗?

是的,这样做没有错。选择器只是一个字符串,您可以根据需要动态构建它。


但我总是得到一个空帖子

我猜你的意思是发送到showAdd 的数据是空的。这是因为您的数据构建错误。

来自docs

对象(传递给数据)必须是键/值对。

您没有这样做,而是构建字符串数组 (var dataString = [];) 并将其转储到数据中 (data: dataString)。数组不是键值对。这是一个键值对key:value, key:value 所以你的数组就是你的值,你的键在哪里?

所以如果你的方法需要一个参数(x),而你想发送y。你应该这样做:

$.ajax(  
        type: "POST",  
        url: "/index.php/trainings/showAdd",
        data: x:y,
        dataType: 'json',
        success: function(data)   
            $("div#addModalBody").html(data.html);
          
    );

我不使用 PHP,所以我不确定服务器端应该是什么样子,而且您还没有添加应该发送到服务器代码的预期参数。 p>

【讨论】:

实际上我希望 dataString 在最后看起来像这样: dataString[0][repeat], datastring[0][distance] .... dataString[199][repeat], dataString[ 199][距离] 那不是有效的 HTTP。你希望 HTTP 是什么?应该是key=value&key=value&....etc。 添加您的服务器端代码,我可能会提供帮助,目前我只是猜测您对服务器端的期望。 我目前没有服务器端代码,我只想先在 firebug 中查看正确的 POST。我不能发布一个数组数组吗? 不,你不能。不是直接的。 HTTP 仅支持键/值对。我不确定 PHP 是否会映射更复杂的对象。它可能(MVC 确实如此),恐怕不是我的领域。【参考方案2】:

如果在这种情况下,您应该使用class

<input type="text" id="repeat0" class="repeat" />
<input type="text" id="repeat1" class="repeat" />
<!-- apply class on elements for distance,style,change,time,etc.-->

你的代码会是这样的,

var dataString = [];
$('.repeat').each(function(index,value)
    obj=;
    obj['repeat']=$(this).val();// repeat value
    obj['distance']= $('.distance:eq('+index+')').val();// let distance class for all distance values
    obj['style']= $('.style:eq('+index+')').val();// let distance class for all distance values
    obj['change']= $('.change:eq('+index+')').val();// let style class for all distance values
    obj['time']= $('.time:eq('+index+')').val();// let time class for all distance values
    dataString.push(obj);    // add data to final array
);
// your ajax code here

【讨论】:

以上是关于带有循环和字符串选择器的未定义 ajax 帖子的主要内容,如果未能解决你的问题,请参考以下文章

带有循环包含的脚本中的未定义变量(第一个脚本包含另一个包含第一个的)

带有 Ajax 的 Jquery 日期选择器不起作用

使用 Ajax 的带有自定义分类法的 Wordpress 多个自定义帖子类型过滤器 - 所有新创建的帖子都不会在响应中显示

SWIG tcl:log4cpp 包装器的未定义符号错误

带有选择器的 SwiftUI 列表:选择不适用于自定义类型(macOS)

带有身份检查器的自定义 Xcode 选择器