-3

私は 1 つのフォームを動的に作成し、データが js オブジェクトである以下のコードのように送信しています。

var inputStr = '';
if (typeof data != undefined) {
  for (var prop in data) {
    if (data.hasOwnProperty(prop)) {
       inputStr += "<input type='text' name='" + prop + "' value='" + data[prop] + "' />";
    }
  }
}
var form = $('<form style="display:none;" action="/someurl.do" method="post">' + inputStr + '</form>');
$('body').append(form);
$(form).attr('target', '_blank');
$(form).submit();

現在、特殊文字に問題があります。データのいずれかのプロパティに特殊文字が含まれている場合、一部のジャンク文字に変換されます。この問題を解決する方法についての指針。

4

2 に答える 2

1

問題は、文字列を連結して要素を手動で作成していることです。閉じたタグを jQuery オブジェクトに渡すことで、要素を動的に作成できます。たとえば、新しい<input/>要素を作成する場合は、単純に次のようにします。

var input = $('<input/>');

その要素の属性/プロパティを指定する必要がある場合は、次のようにオブジェクトを 2 番目の引数として渡します。

var input = $('<input/>',{
    name : 'theName',
    value : 'theValue'
});

この方法で渡された値は正しくエスケープされます (特殊文字は解析されます)。次のようにすることもできます。

var input = $('<input/>',{
    name : 'theName'
}).val('theValue');

それに応じてコードをリファクタリングしました:

http://jsfiddle.net/vdxnn/1/

//Sample data
var data = {
    field1 : 'Q@#*&^$@$)@^#$',
    field2 : 'value2',
};

//Create the form
var form = $('<form/>',{
    target: 'blank',
    action: '/someurl.do',
    method: 'post'
    //NOTE: `style : 'display:none'` isn't necessary;
    //      just use the hide() method
});

//Loop through data object
if (typeof data !== 'undefined') {
  for (var prop in data) {
      //Create a new <input/> element
      var input = $('<input/>',{
          type:'text',
          name: prop,
          value: data[prop]
      });
      //Append it to the form
      form.append(input);
  }
}

//Hide the form
form.hide()

//Append the form to the body
$('body').append(form);

//Submit the form
$(form).submit();
于 2013-03-12T18:30:03.540 に答える
0
  • 特殊文字とは何ですか?
  • どこdataから来たの?
  • の値はdata?

今日の教訓: 代わりにif (typeof data != undefined)...できることif (data)...

于 2013-03-12T18:12:20.250 に答える