0

私はjqueryの初心者なので、これはばかげているかもしれません。ユーザーから csv データを取得し、それを json に変換したいと考えています。素敵なライブラリを見つけましたが、jquery での送信方法がよくわかりません。

たとえば、ビューがある場合

<script type="text/javascript" src="<?php echo site_url('public/js/jquery.js') ?>" ></script>
<script type="text/javascript" src="<?php echo site_url('javascript/main.js') ?>" ></script>


    <div id="message"><p></p></div>

    <form id="convertForm" name="convertForm" onsubmit="return false; ">
        CSV<br /><textarea id="csv" name="csv" rows="10" cols="60"></textarea><br /><br />

        JSON<br /><textarea id="json" name="json" rows="10" cols="60" readonly="readonly"></textarea><br /><br />


        <input type="button" value="Convert" id="submitButton"/> <input type="reset" />
    </form>

そしてmain.jsファイル

function parseCSVLine (line)

            {
                line = line.split(',');
                for (var i = 0; i < line.length; i++)
                {
                    var chunk = line[i].replace(/^[\s]*|[\s]*$/g, "");
                    var quote = "";
                    if (chunk.charAt(0) == '"' || chunk.charAt(0) == "'") quote = chunk.charAt(0);
                    if (quote != "" && chunk.charAt(chunk.length - 1) == quote) quote = "";

                    if (quote != "")
                    {
                        var j = i + 1;

                        if (j < line.length) chunk = line[j].replace(/^[\s]*|[\s]*$/g, "");

                        while (j < line.length && chunk.charAt(chunk.length - 1) != quote)
                        {
                            line[i] += ',' + line[j];
                            line.splice(j, 1);
                            chunk = line[j].replace(/[\s]*$/g, "");
                        }

                        if (j < line.length)
                        {
                            line[i] += ',' + line[j];
                            line.splice(j, 1);
                        }
                    }
                }

                for (var i = 0; i < line.length; i++)
                {
                    // remove leading/trailing whitespace
                    line[i] = line[i].replace(/^[\s]*|[\s]*$/g, "");

                    // remove leading/trailing quotes
                    if (line[i].charAt(0) == '"') line[i] = line[i].replace(/^"|"$/g, "");
                    else if (line[i].charAt(0) == "'") line[i] = line[i].replace(/^'|'$/g, "");
                }

                return line;
            }

            function csvToJson ()
            {
                var message = "";
                var error = false;
                var f = document.forms["convertForm"];
                var csvText = f.elements["csv"].value;
                var jsonText = "";

                setMessage(message, error);

                if (csvText == "") { error = true; message = "Enter CSV text below."; }

                if (!error)
                {
                    benchmarkStart = new Date();
                    csvRows = csvText.split(/[\r\n]/g); // split into rows

                    // get rid of empty rows
                    for (var i = 0; i < csvRows.length; i++)
                    {
                        if (csvRows[i].replace(/^[\s]*|[\s]*$/g, '') == "")
                        {
                            csvRows.splice(i, 1);
                            i--;
                        }
                    }

                    if (csvRows.length < 2) { error = true; message = "The CSV text MUST have a header row!"; }
                    else
                    {
                        objArr = [];

                        for (var i = 0; i < csvRows.length; i++)
                        {
                            csvRows[i] = parseCSVLine(csvRows[i]);
                        }

                        benchmarkParseEnd = new Date();

                        for (var i = 1; i < csvRows.length; i++)
                        {
                            if (csvRows[i].length > 0) objArr.push({});

                            for (var j = 0; j < csvRows[i].length; j++)
                            {
                                objArr[i - 1][csvRows[0][j]] = csvRows[i][j];
                            }
                        }

                        benchmarkObjEnd = new Date();

                        jsonText = JSON.stringify(objArr, null, "\t");

                        benchmarkJsonEnd = new Date();

                        f.elements["json"].value = jsonText;

                        benchmarkPopulateEnd = new Date();

                        message = getBenchmarkResults();


                    }
                }

                setMessage(message, error);
            }

$(document).ready(function(){

            $('#submitButton').on('click', function(){

                console.log('i got here');
                csvToJson;


            });



});

これは完全に機能しますが、console.log は表示されません。

csvToJson 関数から jsonText を返し、それを 2 番目のテキストエリアに追加するようなことをしようとしても、うまくいきません。

function csvToJson ()

{

//same code here

return jsonText;

}


$(document).ready(function(){

            $('#submitButton').on('click', function(){

                console.log('i got here');
                jsont = csvToJson();
                                $("#json").val(jsonT);


            });

それは明らかに、提出について得られないものです。jquery .submit() 関数を使用する必要がありますか?

4

1 に答える 1

1

csvToJsonクリック ハンドラー内で呼び出すときに角かっこがありません。

変化する:

$('#submitButton').on('click', function(){ 
                csvToJson;
});

$('#submitButton').on('click', function(){ 
                csvToJson();
});

デモ: http://jsfiddle.net/MRmJM/1/

1 つの注意: CSV がセミコロン (珍しいことではありません) で区切られている場合、パーサー コードは適切なオブジェクトの作成に失敗します

于 2012-12-09T13:45:25.167 に答える