2013-09-23 3 views
0

Ajax와 Jquery를 사용하여 JSON 데이터를 Perl 스크립트에 전달하려고합니다. Perl 스크립트에서 데이터를 다시 읽으려고합니다. 하지만 Perl에서 데이터를 읽을 수 없습니다.Perl에서 JSON 데이터를 읽을 수 없습니다.

누군가 나를 도울 수 있습니까? 잘못되었거나 누락되었습니다. HTML과 PERL 모두에 대한 코드가 아래에 나와 있습니다. Ajax는 인쇄 성공 경고 또는 오류 경고를 호출하지 않습니다.

는 HTML 파일

<!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> 

**이 어떤 도움이 높게 평가 될 것입니다 **

#!/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

HTML 파일에서 JSON.stringify (...)를 사용할 필요가 없다는 것을 의미합니다. –

+0

Firefox 용 Firebug를 가져오고 ajax url/requests/responses를 확인하십시오. 응답이 없으면 웹 서버도 확인하십시오. –

답변

0

JS 사이드 코드가 쿼리 매개 변수 dataString을 POST하지 않지만 POST가 요청 본문에 직렬화를 대신합니다. 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')); 
.... 
관련 문제