2013-09-23 2 views
0

Я пытаюсь передать данные JSON с помощью Ajax и Jquery в Perl-скрипт. В сценарии Perl, пытаясь прочитать данные обратно. Но я не могу прочитать данные в Perl.Не удалось прочитать данные JSON в perl

Может ли кто-нибудь помочь мне, есть что-то неправильно или отсутствует. Код для HTML и PERL приведен ниже. Ajax не вызывает ни предупреждения о успешном завершении печати, ни предупреждения об ошибке.

Это HTML FILE

<!DOCTYPE html> 
<html> 
<head> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"  </script> 
<script src="json.js" </script> 


<script> 
$(document).ready(function(){ 
    $("#get").click(function(){ 

var data = { 
    "name": "Bob", 
    "sex": "Male", 
    "address": { 
      "city": "San Jose", 
      "state": "California" 
    }, 
    "friends": 
      [ 
        { 
          "name": "Alice", 
          "age": "20" 
        }, 
        { 
          "name": "Laura", 
          "age": "23" 
        }, 
        { 
          "name": "Daniel", 
          "age": "30" 
        } 
      ] 
}; 



alert (data); 
    var dataString = JSON.stringify(data, null, 2); 
    alert (dataString); 

    $.ajax({ 
     type: 'POST', 
     url: 'cgi-bin/test3.pl', 
     data: dataString, 
     success: function(){ 
       alert("data"); 

      }, 

    error: function() 
    { 
     alert ("something wrong"); 
    } 
     }); 
    }); 
}); 
</script> 
</head> 
<body> 

<button id="get">save</button> 

</body> 
</html> 

** Это мой Perl Файл **

#!/usr/bin/perl -w 

use strict; 
use warnings; 
use CGI; 
use CGI qw(:standard); 
use DBI; 
use JSON; 

#print "Content-Type: text/html\n\n"; 

my $cgi = CGI->new; 
my $ddata = decode_json($cgi->param('dataString')); 

my $value = $ddata->{'address'}{'city'} ; 

my $dbh = DBI->connect('dbi:mysql:test','root','') or die "Connection Error:  $DBI::errstr\n"; 
my $sql = "insert into samples values (NULL, '$value')"; 
my $sth = $dbh->prepare($sql); 
$sth->execute or die "SQL Error: $DBI::errstr\n"; 

Любая помощь будет высоко оценен.

+0

Вы передаете строку, а не структуры данных. Сценарий CGI не возвращает ответ. Попробуйте устранить эти две проблемы. – amon

+0

Вы хотите сказать, что мне не нужно использовать JSON.stringify (...) в файле HTML –

+0

Получите Firebug для Firefox, проверьте свои URL-адреса/запросы/ответы ajax. Если ответов нет, проверьте также журналы своего веб-сервера. –

ответ

0

Ваш код JS не отправляет запрос параметр dataString, но POSTs имеют сериализацию в корпусе запроса. Вы должны изменить Perl или JS-сторону, чтобы согласовать, где они хотят, чтобы эти данные были (т.е. как в теле, так и в обоих параметрах).

0
$.ajax({ 
    type: 'POST', 
    url: 'cgi-bin/test3.pl', 
    data: { dataStr: dataString}, 
    success: function(){ 
      alert("data"); 

    }, 

PERL:

#!/usr/bin/perl -w 
... 
my $cgi = CGI->new; 
my $ddata = decode_json($cgi->param('dataStr')); 
.... 
Смежные вопросы