-1

grailsコントローラーからJSに渡すこの文字列があり、jqueryの文字列で $.parseJSON() メソッドを実行しようとしていますが、失敗します。JSON lint でテストしたところ、形式が正しくありませんでしたが、その理由がわかりません。

  private String copydec = """   {
                   "header" : "",
                    "copy" : "<p style='font-family: tahoma, arial, helvetica, sans-serif; font-size: 12px;'><b>Title for some copy</b></p>
                    <p><span style='font-size: 12px;'>Lorem ipsum onsectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio.</span></p>
                    <p><span style='font-size: 12px;'>Lorem ipsum onsectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio.</span></p>
                    <p><span style='font-size: 12px;'></span></p>
                    <p style='font-family: tahoma, arial, helvetica, sans-serif; font-size: 12px;'></p>
    <p style="font-family: tahoma, arial, helvetica, sans-serif; font-size: 12px;"></p>",
                    "checkboxLabel" : "<p>What can I help you with</p>
                    <p></p>"
    }               """

コメントで提案されているように、改行なしですべてを1行に追加しようとしましたが、それでも不正な形式になっています。

        {
           "header" : "","terms" : "<p style="font-family: tahoma, arial, helvetica, sans-serif; font-size: 12px;"><b>Recurring Payments Authorization</b></p><p><span style="font-size: 12px;">Lorem ipsum onsectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio.</span></p><p><span style="font-size: 12px;">Lorem ipsum onsectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio.</span></p><p><span style="font-size: 12px;"></span></p><p style="font-family: tahoma, arial, helvetica, sans-serif; font-size: 12px;"></p><p style="font-family: tahoma, arial, helvetica, sans-serif; font-size: 12px;"></p>","checkboxLabel" : "<p>I accept these terms and conditions.</p><p></p>","digitalSignatureDescription" : "Digital Signature","digitalSignatureDetails" : "Complete digital phone authorization description consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore Description consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore","acceptTermsDesc" : "You must accept these Terms and Conditions to continue with your order.","timestamp" : "07/30/2013 12:58:39","version" : "","signatureDateLabel" : "Date","fullNameLabel" : "Full Name","birthdateLabel" : "Date of Birth","digitalSignatureID" : "BILLING","signatureType" : "TANDC","signatureMethod" : "SIGNATURE"
        }  

更新: JSフィドルで動作するようになったdmahapatroの回答に基づいています。grails コントローラー内のコードを次のように変更しました。

private String copydec = """
'{"header":"","copy":"<p style=\'font-family: tahoma, arial, helvetica, sans-serif; font-size: 12px;\'><b>Title for some copy</b></p><p><span style=\'font-size: 12px;\'>Lorem ipsum onsectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio.</span></p><p><span style=\'font-size: 12px;\'>Lorem ipsum onsectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio.</span></p><p><span style=\'font-size: 12px;\'></span></p><p style=\'font-family: tahoma, arial, helvetica, sans-serif; font-size: 12px;\'></p><p style=\'font-family: tahoma, arial, helvetica, sans-serif; font-size: 12px;\'></p>","checkboxLabel" : "<p>What can I help you with</p><p></p>"}'
"""

私の index.gsp ファイルでは、コントローラー変数を非表示の入力フィールドにダンプしています。

 <input type="hidden" id="copy" value='${bean.copydec}' />

次に、JS ファイルからこれにアクセスします。

   var str = $('#termsAndConditions').val();
   console.log("str = ", str);
   var termsJSON = $.parseJSON( str );

エラー: Uncaught SyntaxError: 予期しない入力の終わり

4

2 に答える 2

0

またはHTMLコンテンツからエスケープされたときにそれをいじることができます。'"

OPの質問への更新に基づく:Json文字列をフレーミングするときは、引用符を賢く使用する必要があります。この場合:

//Make sure you remove the single quote if you use triple quotes for multiline
private String copydec = """
   Your Json String
"""

また

//Assign the json string in one line
private String copydec = 'Your json String'

また

//Use three single quotes for multiple
private String copydec = '''
   Your json String
'''

これはうまくいきません:

//Note the single quote after triple quotes which is the way you are using
private String copydec = """
   'Your json String'
"""

この例は同じことを示しています。

于 2013-07-31T17:52:33.370 に答える