2016-08-22 13 views
1

をPOST応答データを得ることができない、私は戻ってperlのCGIスクリプトからの応答データを取得しようとしている:Javascriptをフェッチ:perlのスクリプトから

私は、次のJavaScriptコードを持っている:

fetch('/test.pl', { 
     method: 'POST', 
     headers: { 
     'Accept': 'application/json', 
     'Content-Type': 'application/json' 
     }, 
     body: JSON.stringify({ 
     name: this.state.msgName, 
     email: this.state.msgEmail 
     }) 
    }) 
    .then((response) => { 
     console.log("been here"); 
     console.log(response); 
    }) 
    .then((responseData) => { 
     console.log("been here 2"); 
     console.log(responseData); 
    }) 
    .then((data) => { 
     console.log("been here 3"); 
     console.log(data); 
    }) 
    .catch((error) => { 
     console.log("Failed!", error) 
    }); 

このperlスクリプト:

#/usr/bin/env perl 
use strict; 
use CGI; 
use JSON; 

my $q = new CGI; 
my $json = new JSON; 

if ($q->param) 
{ 
    print $q->header(); 
    my $hash = $json->decode($q->param('POSTDATA')); 
    print $q->header('application/json'); 
    my $msg = [ sprintf "data from %s received ok", $hash->{name} ]; 
    print $json->encode($msg); 
} 

が、私は唯一の(私はChromeのウェブ開発ツールを使用しています)、これを取得していますし、データなし:

0123私はperlスクリプトがうまく動作確信している

は、ここでは、コマンドラインからそれをテストするための出力です:

# curl -H "Accept: application/json" -H "Content-Type: application/json" -X POST -d '{"name":"uvw","email":"xyz"}' http://localhost/test.pl 
Content-Type: application/json; charset=ISO-8859-1 

["data from uvw received ok"]% 

誰もがバックJSスクリプトにデータ応答を取得する方法を知っていますか?助けをあらかじめありがとう!

答えて

0

私はこれを最後に解決しました。同様の問題を抱えている他の人にも当てはまるかもしれないので、ここで私の解決策を投稿しています。

問題は二重だった:

  1. 私は私が取得する前提内response.jsonを()を使用していない
  2. JSONデータが間違って作るPerlスクリプトから追加のHTMLヘッダを印刷しました。

    JavaScriptコード:

    JSONデータ
  3. ここ

は、固定されたコードです

fetch('/test.pl', { 
     method: 'POST', 
     headers: { 
     'Accept': 'application/json', 
     'Content-Type': 'application/json' 
     }, 
     body: JSON.stringify({ 
     name: this.state.msgName, 
     email: this.state.msgEmail 
     }) 
    }) 
    .then((response) => { 
     response.json().then((data) => { 
      console.log(data); 
     }); 

     return(response); 
     } 
    }) 

Perlコード:私はあなたが私はこれ以上「未定義」持っていないと言う何をすべきか、私はまだperlスクリプトからの応答データを取得しない場合

#/usr/bin/env perl 
use strict; 
use CGI; 
use JSON; 

my $q = new CGI; 
my $json = new JSON; 

if ($q->param) 
{ 
    print $q->header(); 
    my $hash = $json->decode($q->param('POSTDATA')); 
    # NEXT LINE REMOVED, IT WAS WRONG!! 
    #print $q->header('application/json'); 
    my $msg = [ sprintf "data from %s received ok", $hash->{name} ]; 
    print $json->encode($msg); 
} 
3

あなたはデータをコールバックチェーンに渡していません。 then()の場合はthen()ハンドラのreturnが必要です。

function promiseOne() { 
    return Promise.resolve(1) 
}  

promiseOne() 
    .then(one => { console.log(one) }) # 1 
    .then(one => { console.log(one) }) # undefined 

promiseOne() 
    .then(one => { console.log(one); return one }) # 1 
    .then(one => { console.log(one) })    # 1 

最初then()ハンドラは何のreturn文を持っていないので、それは暗黙的にundefinedを返し、それはあなたが次のハンドラで見るものです。

追加の非同期処理を実行していない場合は、通常、then()を複数回呼び出す必要はありません。

+0

[OK]を、 – tvs

+0

ですCGIスクリプトは動作していますか?あなた自身のログに基づいて 'Response'オブジェクトを持っています – slezica

+0

はい、私はcurlを使ってコマンドラインでテストし、正しくデータを返します(私の投稿の最後に何を書いているのかを見てください) – tvs

関連する問題