【问题标题】:Displaying jQuery/JSON value in php form以 php 形式显示 jQuery/JSON 值
【发布时间】:2020-06-08 19:00:38
【问题描述】:

我无法在 php 字段中显示 PHP/JSON 数组的结果。

感兴趣的值是数字 9...'ptm:yes/no'。这取决于数据库中的字段是否为空。这显然是有效的,因为返回了正确的数据。

我已经测试过我得到了正确的结果,如下所示:

但是我无法让它以基于 php 的形式显示。项目编号 3

<tr>
  <td>
    <span class="qText" name="was_PMV"> 3. Did file start as a PMV?</span>
  </td>
  <td>
    <select class="qAns" name="was_PMV_a">
      <option value="No">No</option>
      <option value="Yes">Yes</option>
    </select>
  </td>
</tr>

还有 javascript:

function setOther(data){
    var jdata=JSON.parse(data);
    document.getElementsByName("date_of_incident_a")[0].value=jdata.doi;
    document.getElementsByName("date_of_incident_s")[0].innerHTML=jdata.doi;
    document.getElementsByName("transfer_to_lit_a")[0].value=jdata.ttl;
    document.getElementsByName("transfer_to_lit_s")[0].innerHTML=jdata.ttl;
    document.getElementsByName("filed_suit_a")[0].value=jdata.fsd;
    document.getElementsByName("filed_suit_s")[0].innerHTML=jdata.fsd;
    document.getElementsByName("phase_assigned_a")[0].value=jdata.pa;
    document.getElementsByName("phase_assigned_s")[0].innerHTML=jdata.pa;
    alert ("value to set is : " + jdata.ptm);
    $("[name='was_PMV_a')").val(jdata.ptm);
    document.getElementsByName("was_PMV_s")[0].innerHTML=jdata.ptm;
    document.getElementsByName("trial_date_a")[0].value=jdata.td;
    document.getElementsByName("trial_date_s")[0].innerHTML=jdata.td;
    document.getElementsByName("ALocation_a")[0].value=jdata.al;
    document.getElementsByName("settlement_t4")[0].value=Math.round(jdata.sto);
    formatValue('4');

我有一种感觉,recoveryForm.php 上的断开连接...这需要是一个下拉菜单吗?在表单上显示 jdata.ptm 的返回值(是/否)的最简单方法是什么?

这就是它的样子

无论我做什么,表单上的值都显示为“否”...我认为这必须是对表单的简单修复?

编辑 - 我相信我已将我的问题与我的 getOther.php 文件隔离开来,有人看到任何差异吗?

    <?php
    $success=FALSE;
    $postCasenum = getPostCasenum();
    #header('Content-Type: application/json');

    $sql = "select cases.date_of_incident, cases.case_date_9, cases.case_date_3, user_tab6_data.Trial_Phase, cases.case_date_5, user_case_data.ALocation, cases.staff_1, cases.staff_8, user_case_data.PMV_to_MVA, ";
    $sql=$sql."(select sum(insurance.actual) from insurance where case_num=cases.casenum) as sumTotal ";
    $sql=$sql."from cases LEFT JOIN user_tab6_data ON cases.casenum=user_tab6_data.case_id ";
    $sql=$sql."LEFT JOIN user_case_data ON cases.casenum=user_case_data.casenum ";
    $sql=$sql."WHERE cases.casenum=?";
    $conn = odbc_connect( "needles","dba","sql" );
    if( $conn ) {
        #echo $sql;
        $stmt=odbc_prepare($conn, $sql);
        $queryResult=odbc_execute($stmt, array($postCasenum));

        if (odbc_fetch_row($stmt)) {
            $data = [
                'doi' => odbc_result($stmt,1),
                'ttl' => odbc_result($stmt,2),
                'fsd' => odbc_result($stmt,3),
                'pa' => odbc_result($stmt,4),
                'td' => odbc_result($stmt,5),
                'al' => prepString(odbc_result($stmt,6)),
                'sl' => odbc_result($stmt,7),
                's8' => odbc_result($stmt,8),
                'ptm' => empty(odbc_result($stmt,9)) ? "No" : "Yes",
                'sto' => odbc_result($stmt,10)
            ];
            echo json_encode($data);
        }
 //       while(odbc_fetch_row($stmt)){
 //         $json=$json.'"doi":"'.odbc_result($stmt,1).'",';
 //           $json=$json.'"ttl":"'.odbc_result($stmt,2).'",';
 //           $json=$json.'"fsd":"'.odbc_result($stmt,3).'",';
 //           $json=$json.'"pa":"'.odbc_result($stmt,4).'",';
  //          $json=$json.'"td":"'.odbc_result($stmt,5).'",';
 //           $json=$json.'"al":"'.prepString(odbc_result($stmt,6)).'",';
 //           $json=$json.'"s1":"'.odbc_result($stmt,7).'",';
 //           $json=$json.'"s8":"'.odbc_result($stmt,8).'",';
//          $json=$json.'"ptm":"'.odbc_result($stmt,9).'",';
//            $json=$json.'"sto":"'.odbc_result($stmt,10).'"';
//        }
//        $json=$json.'}';
//        echo $json;
        #echo "you found me!";
        odbc_close( $conn );
    } else {
        echo "{}";
    }
?>
<?php
    function getPostCasenum(){
        return $_POST["casenum"];
    }
    function prepString($myStr){
        $ret=str_replace('"',"",$myStr);
        return $ret;
    }
?>

【问题讨论】:

  • 试试document.getElementsByName("was_PMV_s")[0].value = jdata.ptm;
  • 不走运,谢谢。以前,ptm 项的 document.getElementsByName 与所有其他项都遵循套件,但已被其他人的建议更改......无论哪种方式都不起作用。
  • 这里有语法错误,请先修复这个问题:$("[name='was_PMV_a')").val... 应该是$("[name='was_PMV_a']").val

标签: javascript php jquery json


【解决方案1】:

刚刚测试过,是的,它应该可以使用:

$("[name='was_PMV_a']").val(jdata.ptm);

您的代码:

$("[name='was_PMV_a')").val(jdata.ptm);
//error here -------^

这是您代码中的简单语法错误。你真的应该检查控制台(Chrome 上的 F12)

编辑: 请参阅小提琴回复您的评论https://jsfiddle.net/ofh4yzmr/

【讨论】:

  • 确实,我确实看到了该语法错误并修复了它。但是,当它应该显示为“是”时,该字段始终显示为“否”。表单域需要是下拉菜单吗?没有更简单的方法可以将 jdata.ptm 中包含的原始数据直接输入到空字段中吗?感谢您指出这一点,但是
  • 这取决于你。您可以使用selectradio 选项。请参阅更新帖子中的小提琴。为了演示,我在选择更改之前将值设置为您的变量。问题很可能出在您的函数被调用的地方。
【解决方案2】:

您遇到的问题是您尝试使用 select 标记的 value 属性分配选定的选项,这在 html 中是不可能的(我不知道这是否可以使用 jQuery)。这样做的方法是创建选项元素并单独检查是否应选择它们的状态。请看下面的示例,运行并将ptm 值修改为Yes 或No,您将看到select 选择了适当的选项

请阅读new Option构造函数

// sample data
const data = {
  doi: "2014-05-01",
  ttl: null,
  fsd: "2017-01-21",
  pa: null,
  td: null,
  al: "",
  sl: "ZTRM",
  s8: "",
  ptm: "No",
  st: 50000,
};

const ptm = data.ptm;
const select = document.querySelector('select[name="was_PMV_a"]');
select.innerHTML = "";

for (const entry of ["Yes", "No"]) {
  const option = new Option(entry, entry, entry === ptm, entry === ptm);

  select.appendChild(option);
}
<select class="qAns" name="was_PMV_a">
  <option value="No">No</option>
  <option value="Yes">Yes</option>
</select>

更新 0

尝试添加此功能

function populatePTM(ptm) {
  const select = document.querySelector('select[name="was_PMV_a"]');

  select.innerHTML = "";

  for (const entry of ["Yes", "No"]) {
    const option = new Option(entry, entry, entry === ptm, entry === ptm);

    select.appendChild(option);
  }
}

并修改您的 setOther 函数替换此部分

alert ("value to set is : " + jdata.ptm);
$("[name='was_PMV_a')").val(jdata.ptm);

像这样populatePTM(jdata.ptm); 打电话给populatePTM

【讨论】:

  • 我尝试实施您的解决方案,但唉,结果相同。说到javascript,我基本上没用。我将您的代码放在我的 recoveryForm.js 中并删除了 2 行(警报行和它下面的行)并替换为您的代码。这是实施您的解决方案的正确方法吗?当然,我排除了示例数据,只是在您的示例 json 下方输入了 js 行。
  • 当您说“尝试添加此功能”时,您的意思是除了您原来的答案吗?
  • 是的,将setOther 方法中的alert 行和下一行替换为populatePTM(jdata.ptm); 这是一种方法
猜你喜欢
  • 1970-01-01
  • 2012-06-29
  • 1970-01-01
  • 2012-05-02
  • 2017-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多