在 JSON 中有条件地使用 JavaScript 变量

using javascript variable conditionally in JSON

本文关键字:JavaScript 变量 JSON 有条件      更新时间:2023-09-26

在下面的代码中,我写了一个条件 (if (epsflag==0)<?php $a=",hide:'true'";?> ) .我想使用 javascript 实现相同的条件。我的意思是我想在我的 JSON 中随意使用 JavaScript 变量。任何帮助将不胜感激。如果我的问题不清楚,请告诉我。

{显示:"波浪名称",名称:"

波名称",可排序:真,对齐:"左"<?php echo "$a"?>}

<script type="text/javascript">
function rowdata(epsflag,respflag){
if (epsflag==0) {
<?php $a=",hide:'true'";?>
}else
{
<?php $a=",hide:'false'";?> 
}                           
//alert(respflag);
$("#flex1").flexigrid(
{
url: myurl, 
dataType: 'json',
colModel : [
{display: 'Nr.', name : 'nr',  sortable : true, align: 'center',width:25},
{display: 'Datum', name : 'consultationdate',  sortable : true, align: 'left'},
{display: 'Wave Name', name : 'wavename',  sortable : true, align: 'left'<?php echo "$a"?>},
{display: 'Name', name : 'respname',  sortable : true, align: 'left'},
{display: 'E-mail', name : 'email',  sortable : true, align: 'left',width:180},
{display: 'Telefoon', name : 'telefoon',  sortable : true, align: 'left'},
{display: 'Medewerker', name : 'consultationwith',  sortable : true, align: 'left'}
                                    ],  
                            });
                        }

我认为你误解了网络的工作原理。

PHP 是一种字符串处理语言。它所做的只是生成字符串。由于javascript对PHP来说只是一个非常大的字符串,我们可以用另一个测试字符串替换它,以便更清楚地了解正在发生的事情。让我们将其替换为"bla bla bla.."

bla bla bla bla bla bla
<?php $a=",hide:'true'";?>
bla bla bla bla bla bla
<?php $a=",hide:'false'";?>
bla bla bla bla bla bla
<?php echo "$a"?>
bla bla bla bla bla bla

现在让我们简化一下:

<?php
    $a=",hide:'true'";
    $a=",hide:'false'";
    echo "$a";
?>

这就是 php 执行的内容。因此,它输出字符串:

bla bla bla bla bla bla    // note: you're not outputting anything here
bla bla bla bla bla bla
,hide:'false'
bla bla bla bla bla bla

现在将"bla bla"替换为原始字符串的简化版本,输出变为:

<script type="text/javascript">
function rowdata(epsflag,respflag){
    if (epsflag==0) {
                    // note: you echoed nothing here in PHP
    }
    else {
                    // note: you echoed nothing here in PHP
    }
    $("#flex1").flexigrid({
      colModel : [
        {align:'left',hide:'false'}  // logically, it's always false
      ]
    });
}

现在,如果你一直在听我的解释,并且突然意识到PHP根本不处理javascript,浏览器根本看不到PHP,那么你就会意识到这是一个重复的问题:客户端和服务器端编程有什么区别?

所以。现在我们了解了网络的工作原理,该怎么做才能解决您的问题?

对于这个非常具体的问题,我注意到你根本不需要将任何东西传回 PHP。您要做的就是更改 javascript 对象中的值。那么,当你可以使用javascript直接更改值时,为什么要使用PHP来操作javascript源代码呢?在 js 中执行此操作:

var wavedata = {
    display: 'Wave Name',
    name : 'wavename',
    sortable : true
};
if (epsflag==0) {
    wavedata.hide = 'true';
}
else {
    wavedata.hide = 'false';
}  

$("#flex1").flexigrid({
    colModel : [
        // other data
        wavedata,
        // other data
    ]
});

或者,如果您想使源代码尽可能接近当前代码,请按照 Grundy 的建议进行操作,只是因为您希望将值设置为字符串"true""false"将其更改为:

{/* ... */ align: 'left',hide: epsflag==0 ? 'true' : 'false'}

也许这会有所帮助:

function rowdata(epsflag,respflag){
    $("#flex1").flexigrid(
    {
    url: myurl, 
    dataType: 'json',
    colModel : [
        {display: 'Nr.', name : 'nr',  sortable : true, align: 'center',width:25},
        {display: 'Datum', name : 'consultationdate',  sortable : true, align: 'left'},
        {display: 'Wave Name', name : 'wavename',  sortable : true, align: 'left',hide: (epsflag==0)},
...

更新

如果你不想在对象内部使用变量,你可以尝试这样的事情:

function rowdata(epsflag,respflag){
    var colModel = {};
    if(epsflag == 0){
        colModel = [
            {display: 'Nr.', name : 'nr',  sortable : true, align: 'center',width:25},
            {display: 'Datum', name : 'consultationdate',  sortable : true, align: 'left'},
            {display: 'Wave Name', name : 'wavename',  sortable : true, align: 'left',hide: true }
            ...
    }else{
        colModel = [
            {display: 'Nr.', name : 'nr',  sortable : true, align: 'center',width:25},
            {display: 'Datum', name : 'consultationdate',  sortable : true, align: 'left'},
            {display: 'Wave Name', name : 'wavename',  sortable : true, align: 'left',hide: false }
            ...
    }
    $("#flex1").flexigrid(
    {
    url: myurl, 
    dataType: 'json',
    colModel : colModel,
    ...