【发布时间】:2012-10-29 16:46:04
【问题描述】:
我是 Javascript 新手。 jQuery-ajax-php-cooperation 的代码做了一些奇怪的事情。它有效 - 有时。
这就是我想做的:
- 在表单中进行一些设置(有效)
- 按下提交按钮后读取 JSON 文件(有效)
- 循环 JSON 项,提取每个项的值并形成一个参数字符串(问题在这里:循环不是(总是)在按钮按下的功能中执行)李>
- 将从每个项目值构建的参数字符串发送到 PHP 文件(如果进入循环则有效)
- 接收来自 PHP 文件(html-tag)的响应(工作)
- 使用响应值更新表单元素(尚未实现,实际上显示带有 PHP 响应的警报以用于调试目的)
JSON 文件有效(已测试)。 HTML 页面是有效的 HTML5(已测试)。 PHP 脚本工作并返回一个有效的 HTML-Image-Tag(已测试)。
当我按下按钮时,我为调试目的而实施的警报中没有显示来自 PHP 文件的响应。但这有效:
- 重新加载页面
- 打开 Firebug
- 在循环开始处设置断点
- 向前跳过一条语句
- 重新加载页面
- 循环进入,一切正常
我可以关闭 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>
是什么导致了这种奇怪的行为?我该如何解决?
【问题讨论】:
-
请发布您在
$.getJSON()电话中返回的 JSON 示例。我很好奇data持有什么。