简体   繁体   English

从表中读取数据(HTML,JAVAscript)

[英]Reading data from table (HTML, JAVAscript)

I have this table that receive from the server: (with ajax): 我有从服务器接收的该表:(使用ajax):

    $.each(data, function(i, item) {
        $('#MyTable tbody').append("<tr>"d
             +"<td>" +data[i].A+ "</td><td>" 
             +data[i].B
             +"</td><td><input type='text' value='"
             +data[i].C+"'/></td><td><input type='text' value='"
             + data[i].D+"'/></td>"
             + "</tr>");
        });

C and D are edit text, that the user can change. C和D是用户可以更改的编辑文本。 after the changing by the user I want to "take" the all new data from the table and send it by ajax with JSON. 在用户更改之后,我想从表中“获取”所有新数据并通过ajax和JSON发送。 how can I read the data to a JSON? 如何将数据读取到JSON?

I start to write one but I am stuck on: 我开始写一个,但我坚持:

function saveNewData(){

    var newData= ...
$.ajax({
    type: "GET",
    url: "save",
    dataType: "json",
    data: { 
    newData: newData},
    contentType : "application/json; charset=utf-8",
    success : function(data) {
    ...
    },
    error : function(jqXHR, textStatus, errorThrown) {
        location.reload(true);
    }
    }); 
}

thank you 谢谢

Try something like this, 试试这个

function getUserData()
{
    var newData = new Array();
    $.each($('#MyTable tbody tr'),function(key,val){
        var inputF = $(this).find("input[type=text]");          
        var fileldValues = {};
        fileldValues['c'] = $(inputF[0]).val();
        fileldValues['d'] = $(inputF[1]).val();

        //if you want to add A and B, then add followings as well
        fileldValues['a'] = $($(this).children()[0]).text();
        fileldValues['b'] = $($(this).children()[1]).text();
        newData.push(fileldValues);
    });
    return JSON.stringify(newData);
}

function saveNewData(){

var newData = getUserData();
$.ajax({
    type: "GET",
    url: "save",
    dataType: "json",
    data: { 
    newData: newData},
    contentType : "application/json; charset=utf-8",
    success : function(data) {
    ...
    },
    error : function(jqXHR, textStatus, errorThrown) {
        location.reload(true);
    }
}); 
}

http://jsfiddle.net/yGXYh/1/ http://jsfiddle.net/yGXYh/1/

small demo based on answer from Nishan: 基于Nishan的答案的小演示:

var newData = new Array();
$.each($('#MyTable tbody tr'), function (key, val) {
    var inputF = $(this).find("input[type=text]");
    var fileldValues = {};
    fileldValues['c'] = $(inputF[0]).val();
    fileldValues['d'] = $(inputF[1]).val();
    newData.push(fileldValues);
});
alert(JSON.stringify(newData));

use the jquery on event binding on事件绑定on使用jQuery
try somthing like this. 尝试这样的事情。 Fiddler Demo 提琴手演示

$('#MyTable').on('keyup', 'tr', function(){
    var $this = $(this);
    var dataA = $this.find('td:nth-child(1)').text() // to get the value of A
    var dataB = $this.find('td:nth-child(2)').text() // to get the value of B
    var dataC = $this.find('td:nth-child(3)').find('input').val() // to get the value of C
    var dataD = $this.find('td:nth-child(4)').find('input').val() // to get the Valur of D

    // $.ajax POST to the server form here 
    //  this way you only posting one row to the server at the time

});

I don't normaly do that I would use a data binding libarray such as Knockoutjs or AngularJS 我通常不这样做,我会使用数据绑定的libarray,例如KnockoutjsAngularJS

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM