質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

2回答

4304閲覧

Ajax通信でCGIを使いJSONデータを操作したいです

kit_break

総合スコア14

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2017/07/25 00:55

###前提・実現したいこと
AjaxでPOST関数を使い、C++で作成したCGIを呼び出し、JSONデータを取得したいです。
Ajaxからは JSONデータを送信しています。
そのため、送信したデータをそのまま返却するだけのプログラムを実現したいと考えています

###該当のソースコード

一応、C++でソースを書いているのですが文字列になってしまいどうにもなりません。
また、ライブラリを読み込むと実行できず エントリポイントが見つからない というエラーが発生してしまいます
#include<iostream>
#include<cstdlib>
#include<string>
#include<map>
// 読み込むと実行できない
//#include"picojson.h"

using namespace std;

int main(int argc,const char* argv[])
{
//
//CGI
cout << "Content-type: text/htmlcharset=utf-8\n\n";

//メソッド(GETなのかPOSTなのか)を取得する char* str = getenv("REQUEST_METHOD"); char* txt = new char[256]; //受信したデータを文字列に保管する for(int i=0; i < 256; i++) { fgets(txt,256,stdin); } cout << txt; return 0;

}

###試したこと

###補足情報(言語/FW/ツール等のバージョンなど)
開発環境 eclipse 4.6 g++
サーバー Apache

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

こんにちは。

#include"picojson.h"を有効にすると、ビルドには成功して、実行時「エントリーポイントなし」のエラーが出るということは、共有ライブラリはあるけどその中にインクルードしたpicojson.hが使っている関数が存在しない可能性があると思います。

インストールしているpicojsonのバージョンに相違があるかも知れません。
開発で用いているものと実行時呼び出されるものの相違にご注意下さい。


【余談ですが】
気になった点があります。

for(int i=0; i < 256; i++) {

fgets(txt,256,stdin);
}
cout << txt;

は以下のミスではないでしょうか?

for(int i=0; i < 256; i++) {

fgets(txt,256,stdin);
cout << txt;
}

また、デバッグ用の暫定コードであれば良いのですが、かなり危険なコードです。
C++なら便利な標準のクラスと関数があります。std::stringstd::getline

投稿2017/07/25 01:28

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

episteme

2017/07/25 06:41

picojson は header-onlyのライブラリなんで「エントリポイントが見つからん」と怒られるワケがないんやけどねー...
kit_break

2017/07/25 06:43

返信ありがとうございます 質問の仕方が悪くてすみません。ほとんど何がわからないのかわからない状態なんですよね。 いろいろやってみてるんですが、プロシージャエントリポイントがありません というエラーが多発していて前に進めません。どうやら string型を使うとこのエラーが発生するようなのですが原因が特定できていません。
Chironian

2017/07/25 06:59

epistemeさん、なるほど。ヘッダオンリーでしたか。 hikutunayarouさん epistemeさんが折角ビルドと実行に成功するソースとデータを上げてくれています。それを使ってためしてみませんか? その結果、エラーが起きるなら、そのエラーの状況を誤解の余地なく伝達する方法をご検討下さい。単にコピペですむことがほとんどですし。
kit_break

2017/07/25 09:25

解決しました。 原因はわかりませんが、システム・パスを設定しないしていたら治りました。 お手数をおかけしました。
guest

0

文字列になってしまいどうにもなりません

なに言ってんだかわかんない。picojsonはstreamからjson受け取ってparseできるっしょ。

// 読み込むと実行できない

実行できないってナニ? コンパイルエラー? リンクエラー? 実行時エラー?
'なにをしたらどうなった'を明記せよ。

example.json

json

1{ 2 "Image": { 3 "Width": 800, 4 "Height": 600, 5 "Title": "View from 15th Floor", 6 "Thumbnail" : { 7 "Url": "http://www.example.com/image/481989943", 8 "Height": 125, 9 "Width": "100" 10 }, 11 "IDs": [116, 943, 234, 38793] 12 } 13}

sample.cpp

C++

1#include <picojson.h> 2 3#include <iostream> 4#include <cassert> 5#include <string> 6 7//using namespace std; 8using namespace picojson; 9 10int main() { 11 value root; 12 std::cin >> root; 13 assert( get_last_error().empty() ); 14 15 object image = root.get<object>()["Image"].get<object>(); 16 std::cout << "Width=" << image["Width"].get<double>() << std::endl; 17 std::cout << "Height=" << image["Height"].get<double>() << std::endl; 18 std::cout << "Title=" << image["Title"].get<std::string>() << std::endl; 19 array ids = image["IDs"].get<array>(); 20 21 for ( value item : ids ) { 22 std::cout << item.get<double>() << std::endl; 23 } 24}

compile/run

E:\ProgramData\work\picojson-master>cl -EHsc -I. sample.cpp Microsoft(R) C/C++ Optimizing Compiler Version 19.10.25017 for x64 Copyright (C) Microsoft Corporation. All rights reserved. sample.cpp Microsoft (R) Incremental Linker Version 14.10.25017.0 Copyright (C) Microsoft Corporation. All rights reserved. /out:sample.exe sample.obj E:\ProgramData\work\picojson-master>sample < example.json Width=800 Height=600 Title=View from 15th Floor 116 943 234 38793

投稿2017/07/25 01:24

編集2017/07/25 01:27
episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問