1

我有一个使用外部 js 文件的 php webform

外部文件运行事件,例如:onload、onchange 和 onSubmit

在我的 php 应用程序中,我使用以下方法从 db 收集数据:

<?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 结果显示如下 View from page source

<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 变量。然后该 var 将被传递给下面的 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);

另一件值得注意的事情是,您的 JSON 看起来很奇怪,因为每个值的双引号内都有单引号。您将这些值连接在一起的方式似乎很奇怪。您最好只构建实际对象并对其进行 JSON 编码,这样您就不必处理 javascript 中的任何字符串操作来获取值。尝试这样的事情:

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

$json = json_encode($reqFlds);

这将为您提供一个很好的对象数组,这些对象在 javascript 中更容易使用。

于 2013-01-15T21:10:06.620 回答