我在第三方服务器上手动设置了一项调查 (HTML/JS/CSS/PHP),其中包含一些 LimeSurvey 中不可用的附加功能(即 jQuery Mobile、slicker dseign 等)并进行设置具有与 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 方面看到的内容: (注意:第一个响应是正确的响应,直接从调查手动提交,第二个响应是从 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()
还有什么可能遗漏的吗?对于 add_response API 调用来说,纯文本 POST 值可能不够吗?可能我需要将每个响应值手动格式化为 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);
?>
最佳答案
$aResponseData 必须是要在表中设置的答案数组,查看您的示例,对于 Q1_1、Q1_2、q1_3 具有相同的 3 个答案,您可以使用
$response_data = array(
"527317X1X11" => "3",
"527317X1X12" => "2",
"527317X1X13" => "3",
);
先用这个测试一下。 您可以使用 startdate 设置开始日期和提交日期的 submltdate
关于php - LimeSurvey RemoteControl2 API - 有 add_response PHP 示例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23121669/