jQuery成功函数没有执行

时间:2012-11-24 18:03:22

标签: php jquery

第一个成功函数有效,第二个成功函数...如果我将数据类型更改为文本,它可以工作...但如果我将数据类型更改为文本我无法遍历数组...例如我需要数据[0 ] ..与json一起工作....但是json成功函数不起作用......

var turl = "getForum.php";
var turl = "getForum.php";
var wurl = "getDiscussions.php";
$.ajax({
    url:turl,
    type:"POST",
    dataType:"json",
    success:function(data){
        forumid = data[0]; // this works ...
        dataString = 'forumid='+ forumid;
        $.ajax({
            url:wurl,
            type:"POST",
            dataType:"json",
            data:dataString,
            success:function(data){
                alert(data); // this works if I change datatype to text... but if i type datatype to   text am not able to iterate through the array .. for example i require data[0].. which works with json....but with json success function is not working ... 
            }
        });
    }
});

php文件返回json对象

$query1 = " select * from discussforum where forumId= '$forumid'; ";
$result1 = mysql_query($query1); 

 while($info1 = mysql_fetch_array( $result1 )){
 echo json_encode($info1);
 }

2 个答案:

答案 0 :(得分:2)

你确定你的PHP只返回一个JSON对象吗?如果不是:

$ret = array();
while($info1 = mysql_fetch_array( $result1 )){
    $ret[] = $info1;
}
print json_encode($ret);

答案 1 :(得分:0)

我认为解决方案是在评论中描述的,但在这里它会更详细一些。首先看一下jQuery.ajax()的精美文档。您需要为所有Ajax调用添加错误回调。具有以下签名:

error(jqXHR, textStatus, errorThrown)

你可以像这样添加一个参数给.ajax():

error: function(jqXHR, textStatus, errorThrown) {
  console.error(textStatus);
},

这样,您将在控制台中看到Ajax调用期间以及处理消息期间发生的每个错误。您可以在一些常见的.js文件中定义泛型ajaxError回调,并在任何地方使用它。

在这种情况下,您正在很好地解释错误的原因:getDiscussions.php返回的内容不是JSON,因此当您设置dataType:"json"时,jQuery解析器无法理解它:它会调用error回调如果有的话。但是,当dataType设置为text时,它可以工作。所以POST请求可能会失败。

要查看它发送的内容,您可以在错误回调中提取它,如下所示:

error: function(jqXHR, textStatus, errorThrown) {
  console.error('Error in response: ' + jqXHR.responseText
},

因此您可以诊断服务器中的问题。