JSON解析错误(没有JSON的经验)
我必须将系统从一台服务器移到另一台服务器,并且在尝试访问此页面时遇到错误。该代码与现场工作系统完全相同,但由于某种原因现在不起作用。JSON解析错误(没有JSON的经验)
var loadData = function(data) {
if(data)
data += '&offset=' + offset;
else
data = 'offset=' + offset;
var callback = {
success: function(o) {
try {
var data = YAHOO.lang.JSON.parse(o.responseText);
} catch(e) { alert('e: ' + e + '\no: ' + o + '\ndata: ' + data + '\noffset: ' + offset + '\n Response Text:' + o.responseText); }
// removed a lot of pointless code (no error here)
}
YAHOO.util.Connect.asyncRequest('POST', 'json/dmrlist.php', callback, data);
}
这是从警报打印出:该拉起错误
JS代码
这是PHP代码(的开始),它是“调用“,但是在屏幕截图中看到了一个错误。
line 6: $JSON = json_decode($_POST['JSON']);
line 8: if($JSON->Depot)
line 9: $filter = " AND `Site` = '" . $JSON->Depot . "'";
基本上,$ JSON是不确定的,这意味着什么张贴,但它看起来像的JavaScript,就是要发布的信息呢?
我很困惑,我没有使用JSON或JavaScript的经验,也不知道为什么这不起作用。
数据变量将被发送到服务器,但可能只是键/值对。您可以尝试倾倒出来,如:
if (isset($_POST['JSON'])) {
print_r($_POST['JSON']);
}
if (isset($_POST['Depot']) {
print_r($_POST['JSON']);
}
或者只是 的print_r($ _ POST);
我怀疑没有设置$ _POST ['JSON'],并且您可能不需要将其他值解码为JSON,因为它们可能只是可以直接从$ _POST数组中读取的键/值对,但我不熟悉YUI的ajax函数,所以我可能是错的 - 检查服务器上的值。
P.S.以这种方式使用print_r会导致无效返回(它不会是JSON),但是您可以在Firebug等中查看它并查看值。
我会在哪里放置这段代码?我不能把它放在dmrlist.php上,因为它不会被发布,只能被YUI AJAX函数访问 – Andy 2012-08-02 14:02:36
你应该把它放在dmrlist中。PHP(暂时)或创建一个副本并使用它(只需更改客户端代码以指向它)。你还应该能够看到类似Firebug,Fiddler等的请求变量,并检查是否有名为JSON的参数,以及它是否是json格式。从你的代码发布,我怀疑没有这样的变量,或者它是空的。 – Robert 2012-08-02 14:05:19
我认为它也是空的,唯一的问题是我不知道应该填充什么,或者将数据“发布”到页面以获取。在整个代码库中引用dmrlist.php的唯一地方是上面显示的YUI AJAX函数,所以我认为必须以某种方式发送数据(或不在这种情况下) – Andy 2012-08-02 14:06:57
问题是旧服务器使用的是旧版本的php,因此似乎并不需要“ifsets”(我不知道为什么),但我只是在处理JSON的代码之前放置了if(isset($_POST['JSON'])){
,现在它的工作。我假设第一个循环没有发布任何东西,所以没有东西可以接收,但是ifset让php跳过JSON代码并从db获得第一个选择,然后可以循环回去,这次实际设置为$_POST['JSON']
。
TL; DR:老版本的PHP,只需要放在一个ifset,并宣布你正在试图用json_decode解码可变
发布文字..否则,我们可以猜测整天什么错误。 – 2012-08-02 13:47:52
这就是我不明白,这不是我的系统,它试图得到$ _POST ['json'],我不知道这些数据是从哪里来的。对不起,没有这方面的经验 – Andy 2012-08-02 13:48:54
看起来像你有一个PHP错误,这导致'o.responseText'包含错误消息而不是JSON,这反过来导致JSON解析器错误。 – 2012-08-02 13:49:21