LimeSurvey RemoteControl2 API - 任何add_response PHP示例?

时间:2014-04-16 22:58:37

标签: php jquery xml-rpc json-rpc limesurvey

我有一个调查我手动设置在第三方服务器上(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);
?>

我希望将所有表格的输入发布到这个名为&#34; limesurvey.collector.php&#34;并简单地给Form元素赋予相同的名称(并注意不要进一步更改它们,以便分配新的名称/代码)。

我认为这是一个新的记录显示正确的调查ID,但是值不会被发送,这是我在LimeSurvey方面看到的: LimeSurvey results for Survey (注意:第一个响应是正确的,直接从Survey中手动提交,第二个响应是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()

还有其他可能丢失的东西?对于 add_response API调用,可能只是一个明文POST值不够?可能我需要将每个响应值手动格式化为JSON-RPC样式的单个名称/值对,但如果是,那么每个响应值使用哪个标签? &#34; 527317X1X11&#34;或者&#34; java527317X1X11&#34;第一类? 或者,它更像是XML-RPC的<param><value>列表吗?

编辑:我确实认识到简单编辑LimeSurvey CSS / JS模板以添加移动调查设计内容可能要容易得多,但是,特别是此调查(以及其他类似调查)我需要完全控制不仅仅是调查的自定义样式,还包括发生的域重定向和进行其他处理,例如还将响应提交给托管单独(非Lime调查)调查数据收集服务的另一个医疗服务器。

更新:(顶部的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);

?>

1 个答案:

答案 0 :(得分:2)

$ aResponseData必须是在表格中设置的答案数组,查看您的示例,为Q1_1,Q1_2,q1_3提供相同的3个答案,您可以使用

    $response_data = array(
        "527317X1X11" => "3", 
        "527317X1X12" => "2", 
        "527317X1X13" => "3", 
    );

首先测试一下。 您可以使用startdate为提交的日期

设置开始日期和submltdate