0

CONTEST というデータベースに、次の値を持つフィールド名があります。

50 - DE - HOUSE 5 -D
47 - SHERIFF - M

それらのいくつかの行があります。

フィールド名はテキスト フィールドです。

次の JavaScript を使用して、これらの値を表に表示しようとしています。

//Create list of available contest to display.
function CreateResultSet(featureSet) {
    demVoteCount = 0;
    repVoteCount = 0;
    otherVoteCount = 0;
    RemoveChildren(dojo.byId("race"));
    resultsDataGroup = new Object();
    var controlIndex = 0;
    if (featureSet.length == 0) {
        return;
    }
    else {
        for (var i = 0; i < featureSet.length; i++) {
            if (!resultsDataGroup[featureSet[i].attributes.CONTEST]) {
                resultsDataGroup[featureSet[i].attributes.CONTEST] = new Array();
                var divRaceData = document.createElement("div");
                divRaceData.className = "divData";
                divRaceData.id = "divRaceName" + (controlIndex);
                divRaceData.innerHTML = featureSet[i].attributes.CONTEST;
                divRaceData.setAttribute("controlIndex", controlIndex);
                divRaceData.onclick = function () { DisplayChart(this); };
                dojo.byId("race").appendChild(divRaceData);
                controlIndex++;
            }

            if (featureSet[i].attributes.PARTY == "DEM") {
                demVoteCount += featureSet[i].attributes.VOTES;
            }
            else if (featureSet[i].attributes.PARTY == "REP") {
                repVoteCount += featureSet[i].attributes.VOTES;
            }
            else {
                otherVoteCount += featureSet[i].attributes.VOTES;
            }
            resultsDataGroup[featureSet[i].attributes.CONTEST].push({ ContestName: featureSet[i].attributes.CONTEST, CandidateName: featureSet[i].attributes.CANDIDATE, VoteTotal: featureSet[i].attributes.VOTES, Party: featureSet[i].attributes.PARTY });
        }
        dojo.byId("race").scrollTop = 0;
        currentRaceIndex = 0;
        DisplayChart(dojo.byId("race").childNodes[0]);
        dojo.byId('divSelectedGeometry').innerHTML = dojo.query(".divSelectedGeo", dojo.byId('geometry'))[0].innerHTML + " - ";
    }
}

コードを実行すると、「CONTEST」が見つかりません。

ただし、ダッシュを削除すると、結果は正しく表示されますが、ダッシュが必要です。

ダッシュを考慮して CONTEST と呼ばれるフィールド名を変更する方法はありますか?

これが不適切な表現である場合は、事前に申し訳ありません。

どうもありがとう

4

1 に答える 1

0

SQLにダッシュを付ける方法は、実行している括弧の間に入れるだけなので、ダッシュがSQLを壊してはいけません。

私が持っている唯一の説明は、サーバー側から来るときにオブジェクトにいくつかの値が欠落しているということです。

エラーが発生した行を変更して、追加のチェックを追加してください。

divRaceData.innerHTML = (featureSet[i] && featureSet[i].attributes && featureSet[i].attributes.CONTEST)?featureSet[i].attributes.CONTEST : "VALUE MISSING"; 

「VALUE MISSING」が表示された場合は、サーバー側のコードに何か問題があり、1 つ以上のオブジェクトが期待どおりの階層を持っていません。

Beetroot がコメントで述べたように、このように SQL を注入することは非常に悪い習慣であるため、アプリケーションを継承したとしても、それを変更する価値は十分にあります。

于 2012-10-17T09:49:25.347 に答える