-1

フォームフィールドにデータを入力するために使用している次のコードがあります。このコードは、PHP の json_encode 関数を使用してエンコードされた JSON データセットを受け取ります。

このコードは、一重引用符と二重引用符を別々に使用しても問題なく動作しますが、二重引用符の中に一重引用符が含まれる場合があります。例としては、次のようなテキストエリア内のテキストがあります: The man said "I'm going onvacation".

一重引用符はエスケープする必要がなく、二重引用符は正しくエスケープされていることを読みました。JSON コードを Firebug からバリデーターにコピーしたところ、正しく返されたので、以下のコードに問題があると思われます。Firebug で発生するエラーは構文エラーです。奇妙なことに、単一引用符が 2 つある場合 (つまり、開閉する場合)、問題はなくなりました。

私はこれを見て 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

ここでは、少なくとも 2 つの問題が考えられます。

  1. このセレクターを使用しています: $('#' + i)。それは、数字だけの HTML id 属性を持っているということですか? それは有効な HTML ではありません。
  2. selectedIndexプロパティを JSON 要素e : .prop("selectedIndex", e)に設定しようとしているようです。そこでeの代わりにiを使うつもりだったのですか?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 のスタイリングも少し簡単になります。

私の説明が、最初にJSONが欠落しているために-1をキャンセルすることを願っています:-)

于 2012-07-17T19:37:24.160 に答える