我想通過XMLHttpRequest發送一個JSON對象到Perl腳本(* .cgi) 但我無法解碼cgi文件中的JSON對象。Ajax通信:Perl格式錯誤的JSON字符串
我總是reveive錯誤消息:
畸形JSON字符串,既不陣列,對象,數字,字符串或原子,在字符偏移0
( "(字符串的末尾)"之前)
這是我的javascript代碼:
//ajax communication for receiver/transceiver
function doAjaxRequest(query)
{
if(whatReq == "")
{
alert('ERROR: Request-Type undefined');
return;
}
if (window.XMLHttpRequest)
{
arequest = new top.XMLHttpRequest(); // Mozilla, Safari, Opera
}
else if (window.ActiveXObject)
{
try
{
arequest = new ActiveXObject('Msxml2.XMLHTTP'); // IE 5
}
catch (e)
{
try
{
arequest = new ActiveXObject('Microsoft.XMLHTTP'); // IE 6
}
catch (e)
{
alert('ERROR: Request not possible');
return;
}
}
}
if (!arequest)
{
alert("Kann keine XMLHTTP-Instanz erzeugen");
return false;
}
else
{
var url = "****.cgi";
var dp = document.location.pathname;
arequest.open('post', url, true);
arequest.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
//receiver function
arequest.onreadystatechange = function()
{
switch (arequest.readyState)
{
case 4:
if (arequest.status != 200)
{
alert("Der Request wurde abgeschlossen, ist aber nicht OK\nFehler:"+arequest.status);
}
else
{
var content = arequest.responseText;
analyseResponse(content);
}
break;
default:
//alert("DEFAULT:" + arequest.readyState);
break;
}
}
//transceiver function
query="jsonObj=" + JSON.stringify({name:"John Rambo", time:"2pm"});
alert(query);
arequest.send(query)
}
}
而且這裏的CGI文件:
#!/usr/bin/perl
use CGI qw/:standard/;
use CGI::Carp qw(fatalsToBrowser);
use strict;
use warnings;
use JSON;
use Data::Dumper;
my $jsonObj = param('jsonObj');
my $json = JSON->new->utf8;
my $input = $json->decode($jsonObj );
print Dumper(\$input);
你能幫助我嗎?我不知道如何訪問JSON對象。
非常感謝。
我們需要看到JSON字符串。嘗試打印它。但是有人猜測 - 因爲你把它作爲一個參數,它是URI編碼的。你必須先解碼。 – Sobrique
你不需要'arequest.send(「jsonObj =」+查詢)'? –
我開始查詢前做一個警示:JSON \t \t 名 \t「約翰·蘭博」 \t 時間 \t「14:00」 – Ulf