jQuery json循环用ajax调用php函数

时间:2012-10-29 16:46:05

标签: php jquery ajax json

我是Javascript的新手。 jQuery-ajax-php-cooperation的代码做了很奇怪的事情。它有效 - 有时候。

这就是我想要做的事情:

  • 在表单(作品)中进行一些设置
  • 按下提交按钮(工作)后读取JSON文件
  • 循环JSON项目,提取每个项目的值并形成参数字符串(问题在于:循环不是(总是)在按钮按下的函数中执行)
  • 将从每个项目值构建的参数字符串发送到PHP文件(如果输入循环,则起作用)
  • 从PHP文件(html-tag)(工作)
  • 接收响应
  • 使用响应值更新表单元素(尚未实现,实际上显示带有PHP响应的警报以进行调试)

JSON文件有效(已测试)。 HTML页面是有效的HTML5(已测试)。 PHP脚本工作并返回有效的HTML-Image-Tag(已测试)。

当我按下按钮时,我为实现调试而实施的警报中没有显示PHP文件的响应。但这有效:

  • 重新加载页面
  • 打开Firebug
  • 在loop-begin设置断点
  • 跳过一条声明
  • 重新加载页面
  • 输入循环,一切正常

我可以关闭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+'&param2='+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循环,无法使每个()循环正常工作。

这就是形式:

<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>&nbsp;</p>
   <input type="submit" value="Start Generator" id="generator" name="generator" />
</form>
<div id="imgdisplay" class="imgdisplay"></div>

导致这种奇怪行为的原因是什么?我该如何解决?

1 个答案:

答案 0 :(得分:2)

尝试从匿名点击方法

返回false
$('#generator').click(function(){
    ....
    return false;
}

这将确保点击不会发布您的表单