2

第一个成功函数有效,第二个无效……如果我将数据类型更改为文本,它会起作用……但如果我将数据类型更改为文本,则无法遍历数组……例如,我需要数据 [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);
 }
4

2 回答 2

2

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

$ret = array();
while($info1 = mysql_fetch_array( $result1 )){
    $ret[] = $info1;
}
print json_encode($ret);
于 2012-11-24T18:47:38.217 回答
0

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

error(jqXHR, textStatus, errorThrown)

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

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

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

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

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

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

这样您就可以诊断服务器中的问题。

于 2012-11-24T18:53:09.010 回答