0

jQuery の「$.parseJSON();」を使用して、JSON で手動で初期化された変数を正常に解析できます。しかし、配列を使用して構築された同一の JSON 形式の変数を解析できません。

Javascript

var questionstype = [];
var questionshtml = [];
var questionsquestion = [];
//Store all questions, types, and html for each fieldset into 3 separate arrays
for(var i=1;i<=formpreviewid;i++)
  {
 questionsquestion.push($("#formelement_"+i + " legend").text());
 questionstype.push($("#formelement_"+i).attr("class"));
 questionshtml.push($("#formelement_"+i)[0].outerHTML);
  };
  //alert(questionsquestion[1] + questionstype[1] + questionshtml[1]);

  //format values for each fieldset into values format in mysql
  var questionsvalues = [];
  var index = 0;
  for(var i=1;i<=formpreviewid;i++)
  { 
  questionsvalues.push('{"question":"'+questionsquestion[index]+'","type":"'+questionstype[index]+'","html":"'+questionshtml[index]+'"}');
  index++;
  };
  //alert(questionsvalues);
//questionsvalues = questionsvalues.replace("}{", "},{");
//alert(questionsvalues);

 //format mysql values into JSON format
 var questionsvaluesjson = '{"questions":['+questionsvalues+']}';

同一のJSON形式で手動で構築された文字列変数を使用する -

 var questionsquestion2 = '{"questions":[{"question":"test16","type":"radio", "html":"<input>"},{"question":"test2","type":"checkbox", "html":"<input>"},{"question":"test3","type":"checkbox", "html":"<input>"}]}';

ParseJSON(questionsvaluesjson); //works fine

配列から構築された文字列を使用する -

 var questionsvaluesjson = '{"questions":['+questionsvalues+']}';

 Alert(questionsvaluesjson) :

 {"questions":[{"question":"d","type":"radio","html":"<fieldset id="formelement_1" class="radio"><tr><td colspan="2"><legend>d</legend></td></tr><tr><td><label for="1_1">d</label></td><td><input name="radio1" value="d" type="radio"></td></tr><tr><td><label for="1_2">d</label></td><td><input name="radio1" value="d" type="radio"></td></tr></fieldset>"}]}

 ParseJSON(questionsvaluesjson); //Breaks script

この JSON を php ファイルに送信してデコードし、オブジェクトを操作してデータを mysql データベースに挿入できる foreach ループで使用していますが、現在、foreach ループでオブジェクトを使用しようとするとエラーがスローされます。

ここにエラーがあります:「オブジェクト以外のプロパティを取得しようとしています」

コードは次のとおりです。

PHP

foreach ($theArray->questions as $data)
{   
  $insert .= '("' . $data->question . '", "' . $data->type . '", "' . $data->html . '")';
}
$insert = str_replace(")(","),(",$insert);

$query = "INSERT INTO registrationquestions (question, type, html) VALUES " . $insert; 
$mysqli->query($query);
4

1 に答える 1

0

HTML文字列内に引用符があります:

"html":"<fieldset id="formelement_1" class="radio">

これは完全に壊れています (文字列値は で終わりますid=")。

で引用符をエスケープする必要があります\"

編集:もちろん、これは「なぜうまくいかないのか」という答えです。それを行うためのより良い方法は、JSON.stringify を使用してオブジェクトをシリアル化することです。これは、Kevin のコメントで示唆されているように、この問題やその他の問題を処理します。

于 2013-09-03T18:35:41.923 に答える