在共享点中单击完成按钮后重定向用户时保存调查响应
Saving survey response while redirecting user after clicking finish button in sharepoint
我有一个与 Sharepoint 2013 相关的问题。我有一项调查。在最后一页,有一个 yes/no 问题。我想要的只是在单击 Sharepoint 提供的 "Finish" 按钮后,用户应该被重定向到感谢页面。我通过以下代码提供:
$(document).ready(function(){
if(document.getElementById('ctl00_ctl31_g_78e43776_7d3b_4ab6_9d50_7801d0032f15_c
window.location = "/SitePages/ThankYouE.aspx";
}
});
但是,问题是由于重定向而未保存调查回复。当我删除重定向时,保存过程运行良好。
我的问题:如何保存调查并在保存后重定向用户?
感谢任何帮助。
谢谢
实现此目的的一种方法是向 overview.aspx 页面添加一些代码,以便用户在已经填写调查后被重定向到感谢页面。看看下面的代码就是这样做的。
一些注意事项:
- 我添加了一些代码以允许我禁用重定向。这对调试很有用,因为一旦我填写了调查,就很难再看到概览页面。为此,我正在检查是否定义了 "disableThankYou" 查询字符串参数并将其设置为 1,在这种情况下,感谢重定向逻辑不起作用。
(资源:
How to get the value from the GET parameters?)
- 如果我希望用户在填写调查后能够再次查看 Overview.aspx 页面,此参数也很有用。例如,我们可以在感谢页面上有一个重定向到 "overview.aspx?disableThankYou=1" 的按钮 - 这样,如果用户已经填写了调查并导航到概述页面,他首先会被重定向到感谢页面但可以选择再次转到概览页面。
- 我还建议您在执行以下代码时隐藏主要概述 div(或整个页面?),并且仅在用户未重定向到感谢页面时才显示它。这将使用户体验更好,因为如果没有它,用户将在被重定向到感谢页面之前看到概述页面内容闪烁。
最后注意下面代码中的一些// TODO 注释,您可能想要解决这些问题。
// TODO: Change this to the name of your survey.
var listName = 'Test Survey';
// TODO: Hide the Overview DIV or the whole page.
SP.SOD.executeFunc('sp.js', 'SP.ClientContext', init);
function init()
{
var clientContext = new SP.ClientContext.get_current();
var oWeb = clientContext.get_web();
var oList = clientContext.get_web().get_lists().getByTitle(listName);
var camlQuery = new SP.CamlQuery();
var query = "<View><Query><Where>" +
"<Eq><FieldRef Name='Author' LookupId='TRUE' /><Value Type='Integer'>" + _spPageContextInfo.userId + "</Value></Eq>" +
"</Where></Query></View>"
camlQuery.set_viewXml(query);
this.listItems = oList.getItems(camlQuery);
clientContext.load(this.listItems);
clientContext.executeQueryAsync(Function.createDelegate(this, onItemsLoaded), Function.createDelegate(this, onQueryFailed));
}
function onItemsLoaded(sender, args)
{
if (QueryString.disableThankYou != 1 && this.listItems.get_count() == 1)
{
// TODO: Do your redirect here.
alert('redirecting');
}
else
{
// TODO: Show the Overview DIV.
alert('showing div');
}
}
function onQueryFailed(sender, args)
{
// Todo handle error
alert('Error');
}
var QueryString = function () {
// This function is anonymous, is executed immediately and
// the return value is assigned to QueryString!
var query_string = {};
var query = window.location.search.substring(1);
var vars = query.split("&");
for (var i=0;i<vars.length;i++) {
var pair = vars[i].split("=");
// If first entry with this name
if (typeof query_string[pair[0]] === "undefined") {
query_string[pair[0]] = decodeURIComponent(pair[1]);
// If second entry with this name
} else if (typeof query_string[pair[0]] === "string") {
var arr = [ query_string[pair[0]],decodeURIComponent(pair[1]) ];
query_string[pair[0]] = arr;
// If third or later entry with this name
} else {
query_string[pair[0]].push(decodeURIComponent(pair[1]));
}
}
return query_string;
}();
我有一个与 Sharepoint 2013 相关的问题。我有一项调查。在最后一页,有一个 yes/no 问题。我想要的只是在单击 Sharepoint 提供的 "Finish" 按钮后,用户应该被重定向到感谢页面。我通过以下代码提供:
$(document).ready(function(){
if(document.getElementById('ctl00_ctl31_g_78e43776_7d3b_4ab6_9d50_7801d0032f15_c
window.location = "/SitePages/ThankYouE.aspx";
}
});
但是,问题是由于重定向而未保存调查回复。当我删除重定向时,保存过程运行良好。
我的问题:如何保存调查并在保存后重定向用户?
感谢任何帮助。
谢谢
实现此目的的一种方法是向 overview.aspx 页面添加一些代码,以便用户在已经填写调查后被重定向到感谢页面。看看下面的代码就是这样做的。
一些注意事项:
- 我添加了一些代码以允许我禁用重定向。这对调试很有用,因为一旦我填写了调查,就很难再看到概览页面。为此,我正在检查是否定义了 "disableThankYou" 查询字符串参数并将其设置为 1,在这种情况下,感谢重定向逻辑不起作用。 (资源: How to get the value from the GET parameters?)
- 如果我希望用户在填写调查后能够再次查看 Overview.aspx 页面,此参数也很有用。例如,我们可以在感谢页面上有一个重定向到 "overview.aspx?disableThankYou=1" 的按钮 - 这样,如果用户已经填写了调查并导航到概述页面,他首先会被重定向到感谢页面但可以选择再次转到概览页面。
- 我还建议您在执行以下代码时隐藏主要概述 div(或整个页面?),并且仅在用户未重定向到感谢页面时才显示它。这将使用户体验更好,因为如果没有它,用户将在被重定向到感谢页面之前看到概述页面内容闪烁。
最后注意下面代码中的一些// TODO 注释,您可能想要解决这些问题。
// TODO: Change this to the name of your survey.
var listName = 'Test Survey';
// TODO: Hide the Overview DIV or the whole page.
SP.SOD.executeFunc('sp.js', 'SP.ClientContext', init);
function init()
{
var clientContext = new SP.ClientContext.get_current();
var oWeb = clientContext.get_web();
var oList = clientContext.get_web().get_lists().getByTitle(listName);
var camlQuery = new SP.CamlQuery();
var query = "<View><Query><Where>" +
"<Eq><FieldRef Name='Author' LookupId='TRUE' /><Value Type='Integer'>" + _spPageContextInfo.userId + "</Value></Eq>" +
"</Where></Query></View>"
camlQuery.set_viewXml(query);
this.listItems = oList.getItems(camlQuery);
clientContext.load(this.listItems);
clientContext.executeQueryAsync(Function.createDelegate(this, onItemsLoaded), Function.createDelegate(this, onQueryFailed));
}
function onItemsLoaded(sender, args)
{
if (QueryString.disableThankYou != 1 && this.listItems.get_count() == 1)
{
// TODO: Do your redirect here.
alert('redirecting');
}
else
{
// TODO: Show the Overview DIV.
alert('showing div');
}
}
function onQueryFailed(sender, args)
{
// Todo handle error
alert('Error');
}
var QueryString = function () {
// This function is anonymous, is executed immediately and
// the return value is assigned to QueryString!
var query_string = {};
var query = window.location.search.substring(1);
var vars = query.split("&");
for (var i=0;i<vars.length;i++) {
var pair = vars[i].split("=");
// If first entry with this name
if (typeof query_string[pair[0]] === "undefined") {
query_string[pair[0]] = decodeURIComponent(pair[1]);
// If second entry with this name
} else if (typeof query_string[pair[0]] === "string") {
var arr = [ query_string[pair[0]],decodeURIComponent(pair[1]) ];
query_string[pair[0]] = arr;
// If third or later entry with this name
} else {
query_string[pair[0]].push(decodeURIComponent(pair[1]));
}
}
return query_string;
}();