使用JQuery创建javascript函数

使用JQuery创建javascript函数,javascript,Javascript,我正在从服务器获取JSon数据,并用这些数据构建一个表。表的最后一列是一个按钮,它将从所选行抓取字段以填充其他字段,但返回:ReferenceError:response.DATA未定义 response = JSON.parse(response); $('.myDiv').empty(); // Header var table = '<table class="table table-striped"><thead><tr>&l

我正在从服务器获取JSon数据,并用这些数据构建一个表。表的最后一列是一个按钮,它将从所选行抓取字段以填充其他字段,但返回:ReferenceError:response.DATA未定义

response = JSON.parse(response);

    $('.myDiv').empty();
    // Header
    var table = '<table class="table table-striped"><thead><tr><th>First Name</th><th>Last Name</th><th>City</th><th>State</th><th>ZIP</th><th>Action</th></tr></thead><tbody>';
    var i;
    for(i=0; i<response.ROWCOUNT; i++){
      table += '<tr>';
      table += '<td>' + response.DATA.PROVIDERFIRSTNAME[i] + '</td>';
      table += '<td>' + response.DATA.PROVIDERLASTNAME[i] + '</td>';
      table += '<td>' + response.DATA.PROVIDERCITY[i] + '</td>';
      table += '<td>' + response.DATA.PROVIDERSTATE[i] + '</td>';
      table += '<td>' + response.DATA.PROVIDERPOSTALCODE[i] + '</td>';
      table += '<td><input type="button" class="btn btn-primary" value="select" onClick="setData(response.DATA, i);" /></td>';
      table += '</tr>';
    }
    table += '</tbody></table>';
    $('.myDiv').append(table);

您使用的是内联处理程序,而内联处理程序只能引用全局变量。改为使用Javascript正确地附加侦听器,以便它可以正确地引用变量(最重要的是,
response
i
)。还要确保
i
的块作用域为
let
,而不是函数作用域

您还可以考虑使用模板文字来使代码更易于阅读:

// Header
const $table = $('<table class="table table-striped"><thead><tr><th>First Name</th><th>Last Name</th><th>City</th><th>State</th><th>ZIP</th><th>Action</th></tr></thead><tbody></tbody>');

// make sure to use "let i" here
for (let i = 0; i < response.ROWCOUNT; i++) {
  const $row = $(`
    <tr>
      <td>${response.DATA.PROVIDERFIRSTNAME[i]}</td>
      <td>${response.DATA.PROVIDERLASTNAME[i]}</td>
      <td>${response.DATA.PROVIDERCITY[i]}</td>
      <td>${response.DATA.PROVIDERSTATE[i]}</td>
      <td>${response.DATA.PROVIDERPOSTALCODE[i]}</td>
      <td>${response.DATA.PROVIDERPOSTALCODE[i]}</td>
      <td><input type="button" class="btn btn-primary" value="select"/></td>
    </tr>
  `);
  $row.find('input').on('click', () => {
    console.debug(response.DATA.PROVIDERFIRSTNAME[i]);
  });
  $table.find('tbody').append($row);
}
$('.myDiv').append(table);
//头
const$table=$('First name last name citystatezipaction');
//确保在这里使用“让我来”
for(设i=0;i{
console.debug(response.DATA.PROVIDERFIRSTNAME[i]);
});
$table.find('tbody').append($row);
}
$('.myDiv')。追加(表);
拼写问题-确保使用
PROVIDERFIRSTNAME
而不是
PROVIDERFIRTNAME


内联处理程序被普遍认为是一种糟糕的做法-最好尽可能避免它们。

为什么要定义
response.DATA
response
是通过解析以前作为JSON保存的
response
来填充的,但我们不知道这是什么。当您记录
response
时,它的值是什么?我打赌您正在尝试从内到外读取数组。太棒了。非常感谢。只需更改为$('.myDiv').append($table);您能解释一下$Variable=$('')是如何工作的吗?它创建元素及其内部HTML,并将其全部放入jQuery集合中,允许您对其使用jQuery方法。非常感谢。
// Header
const $table = $('<table class="table table-striped"><thead><tr><th>First Name</th><th>Last Name</th><th>City</th><th>State</th><th>ZIP</th><th>Action</th></tr></thead><tbody></tbody>');

// make sure to use "let i" here
for (let i = 0; i < response.ROWCOUNT; i++) {
  const $row = $(`
    <tr>
      <td>${response.DATA.PROVIDERFIRSTNAME[i]}</td>
      <td>${response.DATA.PROVIDERLASTNAME[i]}</td>
      <td>${response.DATA.PROVIDERCITY[i]}</td>
      <td>${response.DATA.PROVIDERSTATE[i]}</td>
      <td>${response.DATA.PROVIDERPOSTALCODE[i]}</td>
      <td>${response.DATA.PROVIDERPOSTALCODE[i]}</td>
      <td><input type="button" class="btn btn-primary" value="select"/></td>
    </tr>
  `);
  $row.find('input').on('click', () => {
    console.debug(response.DATA.PROVIDERFIRSTNAME[i]);
  });
  $table.find('tbody').append($row);
}
$('.myDiv').append(table);