0

検証プラグインを使用して、リモートバリデーター関数のJSをオンザフライで構築しようとしています。しかし、何らかの理由で、JSをオブジェクトとして変換せず、文字列として扱い、二重引用符を埋め込みます。

元:

私が持っているPHPコードは次のとおりです。

$remoteUrl = '/test/checkusername';
$remoteValidatorJs = "{url: '". $remoteUrl . "',
                      type: 'post',
                      async:false,
                      dataType: 'html',
                      beforeSend: function(){
                         alert('Validating Form Field');
                       },
                       complete: function(){
                         alert('Completed Validation of Form Field');
                       },
                      dataFilter: function(html) {
                          return html;
                      }
                      }";
$validation[ 'rules' ][ 'Name' ][ 'remote' ] = $remoteValidatorJs;

JSを変数でフレーム化または変換するにはどうすればよいですか$remoteValidatorJs。配列が出力されると、最終的には次の「リモート」セクションのコンテンツのようになります。

$("#testForm").validate( {
    "rules":{
        "Name":{
            "remote":{
                url: '/test/checkusername',
                type: 'post',
                async:false,
                dataType: 'html',
                beforeSend: function(){
                    alert('Validating Form Field');                     
                },complete: function(){
                    alert('Completed Validation of Form Field');                      
                },
                dataFilter: function(html) {
                    return html;                     
                }
            }
        }
    }
} );

ありがとう、

4

1 に答える 1

2

JSON は JavaScript のサブセットです。あなたの例は JavaScript 文字列であるため有効な JSON ではありません。

それを評価する唯一の方法は、 Function または eval を使用することです

しかし、あなたが解決しようとしていることを知らなければ、文字列を評価することが解決策であるとは思えません。

関数を含む JavaScript オブジェクト リテラルを含む文字列を使用すると、次のように動作します。PS私はあなたの文字列全体を使用していません:)

var remoteUrl = "http://something.com";
var evalString =
  [
    '{url:"' + remoteUrl + '",',
    'type:"post",',
    'async:false}'
  ].join('')
evalString #// => "{url:"http://something.com",type:"post",async:false}"
var x= new Function("return " + evalString + ";")()
#// => Object
  async: false
  type: "post"
  url: "http://something.com"
于 2012-08-15T18:43:30.430 に答える