1

外部のjsファイルを使用するphpウェブフォームがあります

その外部ファイルは、onload、onchange、onSubmitなどのイベントを実行します

私のphpアプリケーションでは、これを使用してdbmyからデータを収集しました。

<?php
$reqFlds  = array();
$results = mysql_query("select id, display_name from field where account_id = $acct_id2 and required_flag = 1");
    while($RequireResult = mysql_fetch_assoc($results))
        {
            $reqFlds[] = $RequireResult;
        }
    foreach($reqFlds as &$reqFld)
        {
            $reqFld = "'".$reqFld["id"] . "||" . $reqFld["display_name"]."'";
        }
?>

次に、jsonを使用してデータを収集し、phpアプリケーション内の可変jsスクリプトにダンプします。

<script language="javascript">
    var holdReqFlds = <?php echo json_encode($reqFlds); ?>;
</script>

var / arrayの結果は、ページソースからのこのビューのように表示されます

<script language="javascript">
    var holdReqFlds = ["'15||Project Requested By'","'18||Project Title'","'20||Banner Details'","'202||Flyer Details'","'2134||If Gl Code Not above'","'5862||Quantity'"];
</script>

確かに、私はjsonを学んでいるだけなので、これが理解できないことです。この値を外部jsファイルの関数にフィードするにはどうすればよいですか?

以下は参照用のjavascript関数です-これは、phpアプリ内で送信ボタンがクリックされたときに実行されます。つまり、必要に応じてフラグが立てられたすべてのフィールドをholdReqFlds変数に渡します。次に、その変数が以下のchkReq()関数に渡され、フィールドが現在表示されているフィールドセット内にあるかどうかが判別されます。

holdReqFlds varを外部javascriptファイルにあるchkReq()関数に渡す必要があります: どうやって?

 * ###################################
 *  PAGE ONSUBMIT FUNCTION
 * ###################################

function job_onsubmit(action)
{
function isVisible(field) {
    if (field.offsetWidth === 0 || field.offsetHeight === 0) return false;
}

function isBlank(field) {
    if ((field.type == "text" || field.type == "textarea") && field.value.length <= 0) return true;
    if (!(field.checked || field.selected || field.selectedIndex > -1)) return true;
    return false;
}

function chkReq(fieldList) {
    var field = null;
    var blankFields = [];
    for (var i = 0; i < fieldList.length; i++) {
        listItem = fieldList[i].split;
        fieldId = field[0];
        label = field[1];
        field = document.getElementById(fieldList[i].split("||")[0]);
        if (isVisible(field) && isBlank(field)) {
            blankFields[blankFields.length] = fieldList[i].split[1];
        }
    }
    if (blankFields.lentgh > 0) {
        displayError(blankFields);
        return false;
    } else {
        return true;
    }
}

function displayError(blankFields) {
    var msg = "Input required:\n\n";
    for (var i = 0; i < blankFields.length; i++) {
        msg += blankFields[i] + "\n";
    }
}
}
4

1 に答える 1

1

それがグローバルスコープで利用可能であると仮定すると、holdReqFlds次のようになります。

var result = chkReq(holdReqFlds);

もう1つの注意点は、各値の二重引用符の中に一重引用符があるという点で、JSONが奇妙に見えることです。これらの値を連結する方法は非常に奇妙に思えます。値を取得するためにjavascriptで文字列操作を処理する必要がないように、実際のオブジェクトとそれらをJSONエンコードするだけの方がおそらく良いでしょう。次のようなものを試してください。

while($RequireResult = mysql_fetch_object($results)) {
    $reqFlds[] = $row;
}

$json = json_encode($reqFlds);

これにより、JavaScriptでの操作がはるかに簡単なオブジェクトの配列が得られます。

于 2013-01-15T21:10:06.620 に答える