在表内显示ajax jQuery响应

时间:2018-10-25 03:15:43

标签: jquery ajax

我需要在html表中向数据显示ajax调用的响应。现在,它仅显示第一个数据数组,而其他未显示。

我使用了append但对我不起作用。是否还有其他方法可以调用所有其他数组。

ajax功能

jQuery.ajax({
    url: "{{ url('/searchq/') }}",
    method: 'get',
    data: {
        clientemail: jQuery('#cemail').val(),
        clientname: jQuery('#cname').val(),
        productname: jQuery('#pname').val(),
        start: jQuery('#startdate').val(),
        end: jQuery('#enddate').val(),
    },
    success: function(result) {
        console.log(result);
        $('#content').html(
            "<td>" + result[0].id + "</td>" +
            "<td>" + result[0].name + "</td>" +
            "<td>" + result[0].product_name + "</td>" +
            "<td>" + result[0].created_at + "</td>"
        );
    }
});

控制台

enter image description here

我也试过了,但是什么也没显示。

             success: function (result) {
                        console.log(result);
                        $("#content").remove();

                        if (result== "err") {
                            alert("Something Happened Wrong! Please Try Again.");
                        } else {
                            var trHTML = '';
                            $.each(result.ReportArr, function (i, obj) {
                                trHTML += '<tr><td>' + obj.id + '</td><td>' + obj.name + '</td><td>' + obj.product_name + '</td><td>' +  obj.created_at + '</td></tr>';
                            });
                            $('#content').append(trHTML);
                        }
                    }

3 个答案:

答案 0 :(得分:2)

您可以使用$ .each()方法

...
success: function(result) {
    console.log(result);
    $.each(result,function(index,item){ 
        $('#yourTable').append(
            "<tr>" +
            "<td>" + item.id + "</td>" +
            "<td>" + item.name + "</td>" +
            "<td>" + item.product_name + "</td>" +
            "<td>" + item.created_at + "</td>" +
            "</tr>" 
        );
    });
} 
...

yourTable可能是您的表的ID。 在上面的示例中,该表格为结果的每个索引呈现了一个新行。

希望有帮助。

答案 1 :(得分:2)

以上两个答案都使用了不必要的DOM查询量。尝试修改这两种解决方案之一,以使用对表的内存引用,以防止出现过多的DOM查询。

我假设您使用以下语句存储要填充的表:

     var myTableBody = $('#my-table-id tbody');

从此开始,您绝对应该使用循环遍历结果数组。我认为jQuery $ .each太冗长,在这种情况下是不必要的,因为返回对象应该是纯JS数组。

    success: function (result) {
       result.forEach(function(resultRow){
          var tableRow = `<tr>
                            <td>
                              ${resultRow.id}
                            </td>
                            <td>
                              ${resultRow.name}
                            </td>
                            <td>
                              ${resultRow.product_name}
                            </td>
                            <td>
                              ${resultRow.created_at}
                            </td>
                           </tr>`;

           myTableBody
             .append(tableRow);
       });
    }

与其他两个解决方案相比,此解决方案最关键的部分是缺少持久性DOM查询。对于100个项目的结果集,我的解决方案仍然只向DOM查询表元素1次。其他解决方案在DOM中查询表元素以获取结果列表中的项目数。

根据Phil在评论中的建议,我还要添加一个地图实现。

    success: function (result) {
      let tableRows = result.map((resultRow) =>
           `<tr>
              <td>
                ${resultRow.id}
              </td>
              <td>
                ${resultRow.name}
              </td>
              <td>
                ${resultRow.product_name}
              </td>
              <td>
                ${resultRow.created_at}
              </td>
            </tr>`;
       );
       myTableBody.append(tableRows);
    }

答案 2 :(得分:1)

使用$ .each方法,然后将其附加到表的tbody(如果有tbody)。

jQuery.ajax({
    url: "{{ url('/searchq/') }}",
    method: 'get',
    data: {
        clientemail: jQuery('#cemail').val(),
        clientname: jQuery('#cname').val(),
        productname: jQuery('#pname').val(),
        start: jQuery('#startdate').val(),
        end: jQuery('#enddate').val(),
    },
    success: function(result) {
        console.log(result);

        $.each(result, function(index, item) {
            var el = `
                <tr>
                  <td>${item.id}</td>
                  <td>${item.name}</td>
                  <td>${item.product_name}</td>
                  <td>${item.created_at}</td>
                </tr>
            `;

             $('#content > tbody').append(el);
        });
    }
});