Tableau自定义Web数据连接器

时间:2016-02-29 11:37:49

标签: javascript jquery ajax tableau

我正在尝试创建自定义Web数据连接器,我使用了Tableau Web数据连接器教程中提供的示例。

我有一个链接,它返回JSON中的数据,我在jquery AJAX函数中传递url并尝试console.log结果。

但不幸的是,我收到了如下所述的错误。

jQuery('.dj_name').html(show.dj_name);
                    jQuery('.show_name').html(show.show_name);
                    if (show.show_image) {
                        jQuery('.show_image').attr('src',show.show_image).show();

                        $.post('http://www.digitalark.ro/dieselfm/wp-content/themes/vice/p_player_trance.php', 'val='+ show.show_image, function (response) {

   });

                    } else {
                        jQuery('.show_image').hide();
                    }
                });
            }
            curr_show_info();
            setInterval(curr_show_info,60000);

</script>

<?
$value = $_POST['val'];
$resizedimg = '<img class="resizedimg" src=" ' . resizeimagenoecho( $value, 64, 64, auto, 2 ) . ' "/>';
echo ($resizedimg);
?>

当我使用jquery执行AJAX请求而不使用tableau web数据连接器js文件时,我能够从我们创建的链接中检索数据。

当我比较yahooapi和我们创建的链接的结果时,数据采用这种格式。

Yahoo API:

Uncaught WDC error: Uncaught TypeError: Cannot read property 'results' of undefined   stack:TypeError: Cannot read property 'results' of undefined

从我们创建的链接

Object{*query*: Object}

这会有什么不同吗?

请帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

我意识到这是一个老帖子,我不确定是否还有人需要这个问题的帮助,但我在发布自己的问题后遇到了它。我在过去一年中多次使用此REDCap WDC来创建自定义Tableau WDC。我知道这个例子专门用于连接REDCap数据,但WDC的格式/结构是我在开始构建自定义WDC时最常提到的。看看代码,你会发现它很有用。

&#13;
&#13;
(function() {
      var myConnector = tableau.makeConnector();
      // Define the schema
      //  myConnector.getSchema = function(schemaCallback){}
        myConnector.getSchema = function(schemaCallback) {
          var recordsInfo = [];
          $.ajax({
            url: JSON.parse(tableau.connectionData)['url'],
            type: "POST",
            data: {
              token: JSON.parse(tableau.connectionData)['token'],
              content: 'exportFieldNames',
              format: 'json',
              returnFormat: 'json',
              type: 'flat',
              rawOrLabelHeaders: 'raw',
              exportCheckboxLabel: 'true',
              exportSurveyFields: 'true',
              exportDataAccessGroups: 'true'
              },
            contentType: "application/x-www-form-urlencoded",
            dataType: "json",
            success: function(resp){
                recordsInfo = resp;
                var recordSchema = [];
                recordsInfo.forEach(function(field){
                  recordSchema.push({
                    id: field.export_field_name,
                    alias: field.original_field_name,
                    dataType: tableau.dataTypeEnum.string
                  });
                });
                var redcapTable = {
                  id: "redcap",
                  alias: "custom redcap extract",
                  columns: recordSchema
                }
                schemaCallback([redcapTable]);
              }
            });
         };
      // Download the data
      myConnector.getData = function(table, doneCallback) {
        var tableData = [];
          $.ajax({
            url: JSON.parse(tableau.connectionData)['url'],
            type: "POST",
            data: {
              token: JSON.parse(tableau.connectionData)['token'],
              content: 'record',
              format: 'json',
              returnFormat: 'json',
              type: 'flat',
              rawOrLabelHeaders: 'raw',
              exportCheckboxLabel: 'true',
              exportSurveyFields: 'true',
              exportDataAccessGroups: 'true'
            },
            contentType: "application/x-www-form-urlencoded",
            dataType: "json",
            success: function(resp){
            resp.forEach(function(record){
              tableData.push(record);
            });
            table.appendRows(tableData);
            doneCallback();
          }
        });
        }
      tableau.registerConnector(myConnector);
      $(document).ready(function (){
        $("#submitButton").click(function() {
            tableau.connectionData = JSON.stringify({
              'token': $("#token").val(),
              'url': $("#url").val()
            });
            tableau.connectionName = "REDCap Data";
            tableau.submit();
        });
      });
  })();
&#13;
&#13;
&#13;