LimeSurvey では利用できないいくつかの追加機能 (つまり、jQuery Mobile、slicker dseign など) を使用して、サードパーティのサーバー (HTML/JS/CSS/PHP) で手動でセットアップした調査があります。 LimeSurvey で提示およびコード化された実際の調査と同じフォーム要素の名前/値のペア。
JSON-RPC APIを介してリモートでフォームを送信するために私がやろうとしていることは次のとおりです(PHPでは、add_responseのみの基本的な調査データを取得する例に基づいています):
<?php
include "jsonRPCClient.php";
/* using LimeSurvey (LS) RemoteControly API version 2's JSON-RPC method */
define("LS_BASEURL", 'http://'.$host.$path); // adjust this one to your actual LimeSurvey URL
define("LS_USER", $username);
define("LS_PASSWORD", $password);
//instantiate a new client
$jsonRPC = new jsonRPCClient(LS_BASEURL);
//receive session key
$sessionKey = $jsonRPC->get_session_key(LS_USER, LS_PASSWORD);
//get response data from FORM input values
$response_data = $_POST;
//submit survey response data
$groups = $jsonRPC->add_response($sessionKey, $survey_id, $response_data);
//release the session key
$jsonRPC->release_session_key($sessionKey);
?>
フォームのすべての入力を「limesurvey.collector.php」と呼ばれるこのスクリプトに投稿し、フォーム要素に同じ名前を付けるだけで簡単になることを望んでいました(そして、それらをさらに変更しないように注意して、新しい名前/コードを取得します割り当て済み)。
そして、適切な調査 ID に対して新しいレコードが表示されるため、機能していると思いましたが、値が送信されていません。LimeSurvey 側で次のように表示されます:
(注: 最初の回答は適切なものであり、手動で直接送信されます)サーベイから、2 つ目は、値が設定されていない API から入ってくる誤ったものです)
あまり重要ではないと思いますが、リモート FORM 内で POST を実行するための jQuery を次に示します。
var POST_DATA = {
java527317X1X11 : q1,
"527317X1X11" : q1,
java527317X1X12 : q2,
"527317X1X12" : q2,
java527317X1X13 : q3,
"527317X1X13" : q3,
java527317X1X14 : q4,
"527317X1X14" : q4,
java527317X1X15 : q5,
"527317X1X15" : q5,
java527317X1X16 : q6,
"527317X1X16" : q6,
java527317X1X17 : q7,
"527317X1X17" : q7,
java527317X1X18 : q8,
"527317X1X18" : q8,
java527317X1X19 : q9,
"527317X1X19" : q9,
java527317X1X110 : q10,
"527317X1X110" : q10,
java527317X1X111 : q11,
"527317X1X111" : q11,
java527317X1X112 : q12,
"527317X1X112" : q12,
java527317X1X113 : q13,
"527317X1X113" : q13,
java527317X1X114 : q14,
"527317X1X114" : q14,
java527317X1X115 : q15,
"527317X1X115" : q15,
java527317X1X116 : q16,
"527317X1X116" : q16,
java527317X1X38 : gender,
"527317X1X38" : gender,
java527317X1X39 : yearsWork,
"527317X1X39" : yearsWork,
java527317X1X40 : specialty,
"527317X1X40" : specialty,
java527317X1X41 : workHours,
"527317X1X41" : workHours,
lastgroup : "527317X1",
relevance1 : "1",
relevance38 : "1",
relevance39 : "1",
relevance40 : "1",
relevance41 : "1",
relevanceG0 : "1",
movesubmit : "qmovesubmit",
thisstep : "1",
sid : "527317",
start_time : "1397651769",
LEMpostKey : "145856491"
};
$.ajax({
url: PROXY_URL+"http://localhost/survey/limesurvey.collector.php",
type: "POST",
data: POST_DATA,
complete: function(xmlHttp) {
if(xmlHttp.status.toString() == '200') {
$("#framediv").css({'display':'block'});
} else {
window.open(xmlHttp.getResponseHeader('Location'));
//DEBUG:
console.log("Status: " + xmlHttp.status);
}
}
シンプルな jQuery 値アクセスを使用して、すべての jQuery 値が正しく設定されています (コンソール ログに表示されているように)。
$('#fieldname').val()
他に不足している可能性のあるものはありますか?プレーンテキストの POST 値だけでは、 add_response API 呼び出しに十分ではないのでしょうか? おそらく、すべての応答値を JSON-RPC スタイルの個々の名前/値のペアに手動でフォーマットする必要がありますが、そうであれば、各応答値にどのラベルを使用すればよいでしょうか? 「527317X1X11」または「java527317X1X11」タイプですか?それとも、XML-RPC の<param><value>
リストのようなものですか?
編集: LimeSurvey の CSS/JS テンプレートを編集してモバイル調査のデザイン要素を追加する方がはるかに簡単かもしれないことは認識していますが、特にこの調査 (および同様の他の調査) だけでなく、完全に制御する必要があります。調査のためだけのカスタム スタイルだけでなく、別の (Lime-Survey 以外の) 調査データ収集サービスをホストする別の医療サーバーにも回答を送信するなど、追加の処理を行うドメイン リダイレクトも発生します。
更新:(上部のPHPコードは不完全でした。このコードは、私がやろうとしていたことに対して機能します):
<?php
include "jsonRPCClient.php";
/* using LimeSurvey (LS) RemoteControly API version 2's JSON-RPC method */
define("LS_BASEURL", 'http://'.$host.$path); // adjust this one to your actual LimeSurvey URL
define("LS_USER", $username);
define("LS_PASSWORD", $password);
//instantiate a new client
$jsonRPC = new jsonRPCClient(LS_BASEURL);
//receive session key
$sessionKey = $jsonRPC->get_session_key(LS_USER, LS_PASSWORD);
//get response data from FORM input values
$response_data = array();
foreach ($_POST as $key => $value) {
$response_data[$key] = $value;
}
//submit survey response data
$groups = $jsonRPC->add_response($sessionKey, $survey_id, $response_data);
//release the session key
$jsonRPC->release_session_key($sessionKey);
?>