Json:将数组/变量传递给外部js文件

时间:2013-01-15 21:01:46

标签: php javascript json

我有一个使用外部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结果显示如下 从页面来源查看

<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";
    }
}
}

1 个答案:

答案 0 :(得分:1)

假设holdReqFlds在全局范围内可用,您可以这样做:

var result = chkReq(holdReqFlds);

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

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

$json = json_encode($reqFlds);

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