2011-01-10 121 views
0

我正在使用jQuery AJAX从PHP页面获取一些数据,并在占位符中使用加载GIF图像让用户知道结果正在进行中。奇怪的jQuery AJAX问题

$(".project").change(function(){ 
      $(".custName").html("<img src='/admin/images/ajax-loader.gif' />"); 
      $(".projectDesc").html("<img src='/admin/images/ajax-loader.gif' />"); 
      var project_num=$(this).val(); 
      var dataString = 'project='+ project_num; 

       $.ajax 
        ({ 
         type: "POST", 
         url: "customerfilter.php", 
         dataType: "json", 
         data: dataString, 
         cache: false, 
         success: function(data) 
         { 
          $(".custName").html(data.message1); 
          $(".projectDesc").html(data.message2); 
         } 
        }); 


     }); 

当我点击扳机,打开了Firebug的控制台,我可以看到POST去和回来的数据是正确的。然而,加载gif永远不会消失,永远不会被正确的数据取代 - 不知道为什么!?

这是萤火虫的截图和响应窗口:

​​

相对PHP:

while ($row = mysql_fetch_array($result)) { 
       echo json_encode(array(
        "message1" => $row['cust_name'], 
        "message2" => $row['description'], 
       )); 

$结果是一个的mysql_query

+0

告诉我们,回来,并可能产生它的PHP的数据。 – jondavidjohn 2011-01-10 15:17:02

+0

检查'成功'回调是否有效。举一个console.log为例。当响应不是有效的json时,回调没有被正确调用。 – 2011-01-10 15:18:13

回答

5

这种反应是不是一个有效的JSON的任何新信息。试试这个:


$output = Array(); 
while ($row = mysql_fetch_array($result)) { 
       $output[] = Array(
        "message1" => $row['cust_name'], 
        "message2" => $row['description'], 
       ); 
} 
echo json_encode($output); 

编辑:另外,你必须改变你的“成功” javascript的回调也:


success: function(data) { 
    $(".custName, .projectDesc").empty(); 
    for(var x in data) { 
    $(".custName").append(data[x].message1); 
    $(".projectDesc").append(data[x].message2); 
    } 
} 
1

我碰到类似的问题当设置类型为JSON时。如果PHP没有返回100%正确的JSON,那么jQuery将不会运行success函数。

那么试试这个:

  1. 放了console.log("success was called")声明success方法里面,这样你可以看到,当它被调用。

  2. 确保您的PHP代码使用json_encode函数创建适当的JSON。

  3. 后你有那么我们可以继续帮助您调试:-)