0

私はjQueryをまったく使用したことがないので、明らかなエラーが発生したことをお詫びします。

見出しとデータが次のように配置された.CSVファイルがあります。

注文番号、在庫状況、数量、コメント、日付1234567、在庫あり、15、すべて赤、2012年8月15日1234568、在庫切れ、203、隣人と一緒に残す、2012年8月21日1234569、注文中、20 、クローム仕上げ、2012年8月17日1234570、その他、140、木製衣服、2012年1月9日

4つのボタンがあるHTMLページがあります(在庫状況に対応):

在庫あり、在庫切れ、注文中、その他、

上記のいずれかをクリックすると、コードが消え、[在庫状況]列で一致するすべてのレコードが検索され、注文番号、数量、コメントが返されます。

これまでのコード:

var allText =[];
var allTextLines = [];
var Lines = [];
var txtFile = new XMLHttpRequest();

txtFile.open("GET", "file://C:/data.txt", true);
txtFile.onreadystatechange = function()
{
 allText = txtFile.responseText;
 allTextLines = allText.split(/\r\n|\n/);
};

// On opening the site, show the loading icon and GIF.
$(document).ready(function () {
$("#Outline").hide();
$("#loadingTable").delay(1000).hide(0);
$.ajax({
    type: "GET",
    url: "data.txt",
    dataType: "text",
    success: function (data) { processData(data); }     
})
alert("0.2")
});

function showSLAMenus() {
$("#Outline").show();
};

$("#OutOfStock").click(function() {
alert("OutOfStock search")
// returns Order Number, Quantity and Comments for items Out of Stock
});

$("#InStock").click(function() {
alert("InStock search")
// returns Order Number, Quantity and Comments for items In Stock
});

$("#Other").click(function () {
alert("Other search")
// returns Order Number, Quantity and Comments for items Other
});

function processData(allText) {
alert("1")
var allTextLines = allText.split(/\r\n|\n/); 
var headers = allTextLines[0].split(','); 
var lines = []; 

for (var i=0; i<allTextLines.length; i++) { 
    var data = allTextLines[i].split(','); 
    if (data.length == headers.length) { 

        var tarr = []; 
        for (var j=0; j<headers.length; j++) { 
            tarr.push(headers[j]+":"+data[j]); 
        } 
        lines.push(tarr); 
    } 
} 
alert(lines); 
} 

私の2回目の試み:

// On opening the site, show the loading icon and GIF.
$(document).ready(function () {
$("#Outline").hide();
$("#loadingTable").delay(1000).hide(0);
var data = []; // Empty array in global scope where we will store your data

// Your ajax call to get the data and store it in the var above
$.ajax({
    type: "GET",
    url: "data.txt",
    dataType: "text",
    success: function (data) { processData(data); }
})
});

function showSLAMenus() {
$("#Outline").show();
};

setTimeout(showSLAMenus, 1001);

$("#Other").click(function () {
alert("Other1")
// An example search call
var output = searchData(data, "Other");

alert("Other2")

// Dump out the results of our search
for (var i in output) {
    $("div#output").html(output[i] + "<br>");
}
});

// Main function to process the data into an array
function processData(allText) {
var allTextLines = allText.split(/\r\n|\n/);
var headers = allTextLines[0].split(',');
var lines = [];

for (var i = 0; i < allTextLines.length; i++) {
    var data = allTextLines[i].split(',');
    if (data.length == headers.length) {

        var tarr = [];
        for (var j = 0; j < headers.length; j++) {
            tarr.push(headers[j] + ":" + data[j]);
        }
        lines.push(tarr);
    }
    //alert(lines);
}
return lines; // Returns the data you need, to be stored in our variable 
}

// A search function using the jQuery inArray method
// - matches the data position in the array and returns a new array of matched data
function searchData(data, search) {
alert("searchData Called")
// Create a temp array to store the found data
var tempArray = [];

// Loop through the data to see if each array has the search term we need
for (i = 0; i < data.length; i++) {
    var pos = $.inArray(search, data[i]);

    // Add found data to the array
    if (pos !== -1) {
        tempArray.push(data[i]);
    }
}

// Return the array of matched data
return tempArray;
}

ありがとね。jsFiddleのコードは機能しているようです。しかし、私のコードを見て、[その他]ボタンをクリックすると

alert("Other1")
// An example search call
var output = searchData(data, "Other");
alert("Other2")

Alert Other1が表示されますが、searchDataを呼び出せません。

私はまだ持っている必要がありますか

txtFile.open("GET", "file://C:/data.txt", true);
txtFile.onreadystatechange = function()
{
   allText = txtFile.responseText;
   allTextLines = allText.split(/\r\n|\n/);
};

私のコードでは???

ありがとう。

4

1 に答える 1

0

あなたはもうすぐそこにいます。最善の方法は、jQuery$.inArrayメソッドを使用して、配列内の行を目的のデータと一致させることです。必要な検索関数は、必要なデータを新しい配列として返す1つだけです。ここに例があります-編集:http://jsfiddle.net/gNTWk/1/

それはあなたのコードにどのように影響しますか?以下に追加:

$(document).ready(function () {
    
    var data = []; // Empty array in global scope where we will store your data
    
    // Your ajax call to get the data and store it in the var above
    $.ajax({
        type: "GET",
        url: "data.txt",
        dataType: "text",
        success: function(data){
            data = processData(data);
        }     
    });

    // Your main function to process the data into an array
    function processData(allText) {
        alert("1")
        var allTextLines = allText.split(/\r\n|\n/); 
        var headers = allTextLines[0].split(','); 
        var lines = []; 
    
        for (var i=0; i<allTextLines.length; i++) { 
            var data = allTextLines[i].split(','); 
            if (data.length == headers.length) { 
    
                var tarr = []; 
                for (var j=0; j<headers.length; j++) { 
                    tarr.push(headers[j]+":"+data[j]); 
                } 
                lines.push(tarr); 
            } 
        } 
        return lines; // Returns the data you need, to be stored in our variable 
    }


    // A search function using the jQuery inArray method
    // - matches the data position in the array and returns a new array of matched data
    function searchData(data, search){
        // Create a temp array to store the found data
        var tempArray = [];
        
        // Loop through the data to see if each array has the search term we need
        for(i=0; i<data.length; i++){
            var pos = $.inArray(search, data[i]);
            
            // Add found data to the array
            if(pos !== -1){
                tempArray.push(data[i]);
            }
        }
        
        // Return the array of matched data
        return tempArray;
    }


    // An example search call
    var output = searchData(data, "Other");

    // EDITED OUTPUT LOOP    
    for(i=0; i<output.length; i++){
        $("div#output").append(output[i] + "<br>");
    }

 });

編集:searchData機能は大丈夫だっ たことをお詫びします。間違っていたのは出力ループだけでした。上記のコードは正常に機能するはずです。編集されたjsfiddle:http: //jsfiddle.net/gNTWk/1/

于 2012-09-04T09:31:31.760 に答える