我进行了一项调查,我已经手动在第三方服务器(HTML / JS / CSS / PHP)上进行了设置,并提供了LimeSurvey中不可用的一些其他功能(即jQuery Mobile,slicker dseign等),并将其设置为与我在LimeSurvey中演示和编码的实际调查相同的表单元素名称/值对。
我试图通过JSON-RPC API远程提交表单的操作如下(在PHP中,基于他们的示例,该示例仅检索add_response的基本Survey数据):
<?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);
?>
我希望这就像将我所有Form的输入发布到名为“ limesurvey.collector.php”的脚本中一样简单,并且只需为Form元素赋予相同的名称(并注意不要再对其进行更改,以免它们获得新的名称/代码)。分配)。
而且我认为它正在工作,因为新记录显示了正确的Survey ID,但是并没有发送值,这是我在LimeSurvey端看到的内容:
(注意:第一个响应是正确的,直接从调查中手动提交,第二个响应是来自API的错误响应,未设置任何值)
我认为这没什么大不了,但这是我的jQuery在远程FORM内执行POST:
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);
?>
参考方案
$ aResponseData必须是要在表中设置的答案数组,请看您的示例,以使Q1_1,Q1_2,q1_3具有相同的3个答案,您可以使用
$response_data = array(
"527317X1X11" => "3",
"527317X1X12" => "2",
"527317X1X13" => "3",
);
只需先测试一下。
您可以使用startdate设置提交日期的开始日期和子日期
我是PHP的新手,正在尝试使用Datatables jQuery插件。我知道我必须从.php文件中获取数据,然后在数据表中使用它,但是我似乎无法通过ajax将其传递给数据表。我设法从数据库中获取数据,并对其进行json编码,但是后来我不知道如何在我的index.php文件中调用它,并在其中显示它。我究竟做错了什么?这是我的代码:HTML(已编辑): <…
PHP str_replace是否具有大于13个字符的限制? - php直到击中第13个字符为止。一旦str_ireplace在cyper数组中击中“ a”,str_ireplace就停止工作。数组的大小有限制吗?请记住,如果键入“ abgf”,我会得到“ nots”,但是如果键入“ abgrf”,我应该得到“ notes”,那么我就会得到“ notrs”。机架使我的大脑无法解决。$_cypher = array("n…
Google Analytics API - php我正在实施Google Analytics(分析)Api。授权完成没有问题。成功授权后,我得到403 return code并得到消息:User does not have sufficient permissions for this profile。我的帐户具有Google Analytics(分析)数据,可以跟踪多个网站,并且我可以从网络浏览器访问它而…
带有图像的PHP REST API Web服务是否正确使用? - php我是开发Web服务的新手,我的想法是基于PHP构建REST API。这使得CRUD图像文件成为可能,例如images / test.jpg。是否可以通过REST Web服务获取图像?如果是,那怎么办?还是仅针对json响应提供Web服务?我更喜欢没有框架的方法,因为我想学习。我的路线:// GET /api/images # Get alle images …
PHP:获取调用引用的数组名称 - php假定以下函数并调用:function doSomething( &$someArray ) { // Do something to $someArray } $names=array("John", "Paul", "George", "Ringo"); doSomet…