私はJavascriptが初めてです。jQuery-ajax-php-cooperation のコードは奇妙なことをします。それは動作します - 時々。
これは私がやりたいことです:
- フォームでいくつかの設定を行う(機能する)
- 送信ボタンを押した後に JSON ファイルを読み取る (動作)
- JSON項目をループし、各項目の値を抽出し、パラメーター文字列を形成します(問題はここにあります:ボタンが押された関数でループが(常に)実行されるわけではありません)
- 各項目の値から構築されたパラメーター文字列を PHP ファイルに送信します (ループに入った場合に機能します)
- PHP ファイル (html タグ) からの応答を受け取る (動作)
- フォーム要素を応答値で更新します (まだ実装されていません。実際には、デバッグ目的で PHP 応答を含むアラートを表示します)
JSON ファイルは有効です (テスト済み)。HTML ページは有効な HTML5 (テスト済み) です。PHP スクリプトが機能し、有効な HTML-Image-Tag (テスト済み) を返します。
ボタンを押しても、デバッグ用に実装したアラートに PHP ファイルからの応答が表示されません。しかし、これは機能します:
- ページをリロード
- ファイアーバグを開く
- ループ開始時にブレークポイントを設定
- ステートメントを 1 つ先にスキップする
- ページをリロード
- ループに入り、すべて正常に動作します
Firebug を閉じることができ、ループは適切に実行されます。
JavaScriptコード
<script type="text/javascript">
$(document).ready(function () {
//click event of submit button
$('#generator').click(function(){
// GET variables
var datafile = "my.json";
var logo = false;
// if checkbox is checked
if( $('#logo').attr('checked')){
logo = true;
};
// read data from json file
$.getJSON(datafile,function(data){
//iterate through the data-sets
for(var i=0; i < data.length; i++) {
// get the response from server for each data-set
$.ajax({
type: 'POST',
async: false,
cache:false,
url: 'myfile.php',
data: 'param1='+data[i].field1+'¶m2='+data[i].field2+'&logo='+logo,
success: function(response){
//$('#imgdisplay').html(response);
// alert only for debugging purposes
alert(response);}
}); // end of ajax-call
}; // end of for-loop
} ); // end of getJSON
}); // end of button.click
}); // end of document.ready
</script>
(悪意のあるフォーマットで申し訳ありません)
for ループを使用していますが、each() ループを正しく動作させることができませんでした。
そして、これはフォームです:
<form name="settings">
<label>Source file</label>
<select id="datasource" name="datasource">
<option value="extract">Extract</option>
<option value="filter">Filter</option>
</select><br />
<label>Logo</label>
<input type="checkbox" id="logo" name="logo" value="ON"/><br />
<p> </p>
<input type="submit" value="Start Generator" id="generator" name="generator" />
</form>
<div id="imgdisplay" class="imgdisplay"></div>
この奇妙な動作の原因は何ですか? どうすれば解決できますか?