Я хочу отправить XMLHttpRequest объект JSON в Perl Script (* .cgi) Но я не могу декодировать объект JSON в файле cgi.Ajax Communication: Malformed JSON string в Perl
Я всегда 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
Вам не понадобится 'isquest.send (" jsonObj = "+ query)'? –
я делаю предупреждение перед запуском запроса: JSON \t \t имя \t «Джон Рэмбо» \t время \t «2 вечера» – Ulf