-1

我有以下代码用于填充表单字段。此代码接收已使用 PHP json_encode 函数编码的 JSON 数据集。

该代码分别适用于单引号和双引号,但是有时我会在双引号内使用单引号。一个例子是文本区域内的文本,它可能会说:这个人说“我要去度假”。

我读过单引号不需要转义,并且双引号被正确转义。我已将 Firebug 中的 JSON 代码复制到验证器中,它返回正确,这让我认为下面的代码有问题。我在 Firebug 中遇到的错误是语法错误。奇怪的是,如果我有两个单引号(即打开和关闭),问题就不再存在了。

我已经花了 3 个小时来研究这个问题,但似乎离解决方案还差得远。我一如既往地接受所有建议!我可以根据需要提供更多代码片段。

$.ajax({
    type: "GET",
    url: "casedata.php",            
    data: {'caseid':'<?php echo($caseid); ?>', 'callid':'<?php echo($_GET['callid']); ?>', 'stage':'thlViewCall'},
    dataType: "json",
    async: false,
    success: function(data){                    
        $.each((data), function(i, e) {                                 
            if($("input[type=text]")) {
                $('#'+i).val(e);
            }
            if($("input[type=select-one]")) {
                $('#'+i+' option').prop("selectedIndex", e);    
            } 
            if($("input[type=select-multiple]")) {                          
                $('#'+i+' option').prop("selectedIndex", e);    
            }
            if($("input[type=radio]")) {
                $('input[name="'+i+'"][value="'+e+'"]').attr('checked', 'checked');
            }
        });
    }
});

编辑:

抱歉,请在下面找到显示此错误的 JSON:

{"calldate":"06-07-2012","adviserid":"18","service":"THL","dda_sen":"eqa","finalhearing_date":"24-07-2012","reason_for_tribunal":"part_4","next_deadline_description":"before_final_evidence","understanding_paperwork":"1","ability_negotiate":"1","legal_complexity":"1","comments":"test","action":"referred_to_tss_for_telephone_support","bgInfo":"The man said \"I'm going on holiday\"","initialAdvice":"test2","logreceived":"no","monitored":"no","monitoredby":"","monitoreddate":"00-00-0000","monitorednotes":"","legalsupport":"no","legalsupportid":"0","legalsupportdate":"00-00-0000","legalsupportnotes":""}
4

2 回答 2

0

我可以在这里看到至少两个可能的问题。

  1. 您正在使用此选择器:$('#' + i)。这是否意味着您的 HTML id 属性只是数字?那将不是有效的 HTML。
  2. 看起来您正在尝试将selectedIndex属性设置为某个 JSON 元素e : .prop("selectedIndex", e)。你的意思是用i代替e吗?如果您将带有单引号的文本插入 HTML 属性,这可能会解释语法错误。
于 2012-07-05T21:50:07.197 回答
0

我已经解决了这个问题,并想分享我的结果,考虑到我在多个主题的多个问题中收到的建议。

我发现使用 input[type] 进行选择非常不可靠,由于某种原因,我的文本字段被检测为单选框,导致不需要的结果。解决此问题的最简单方法是使用应用于我的表单元素的类选择器,我的代码示例如下:

if($("[name="+i+"]").is(".textbox, .select")) {
    $("[name="+i+"]").val(e);
}

if($("[name="+i+"]").is(".radio")) {
    $("input[name="+i+"][value="+e+"]").attr('checked', 'checked');
}

这将评估在“i”javascript 变量中传递的字段名称,检查该字段的 CSS 类,然后相应地设置值或属性。在我看来,这非常整洁,也使 CSS 样式更容易一些。

我希望我的解释取消了 -1 因为缺少 JSON 开头:-)

于 2012-07-17T19:37:24.160 回答