仅通过第二次单击即可使用JQuery和SharePointPlus js lib上传到SharePoint库的文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了仅通过第二次单击即可使用JQuery和SharePointPlus js lib上传到SharePoint库的文件相关的知识,希望对你有一定的参考价值。

我正在使用SharepointPlus 5.2 js库的createFile()方法将文件上传到SharePoint 2013库。它可以在大多数SP库上完美运行。但是在新创建的SP库上,第一次单击时会引发错误(需要文件内容),然后在第二次单击时进行正确的上载。如何解决这个问题?

标题部分包括:

<script type="text/javascript" src="/_layouts/15/MicrosoftAjax.js"></script>
<script type="text/javascript" src="/_layouts/15/sp.runtime.js"></script>
<script type="text/javascript" src="/_layouts/15/sp.js"></script>
<script type="text/javascript" src="/_layouts/15/init.js"></script>
<script type="text/javascript" src="/_layouts/15/core.js"></script>
<script type="text/javascript" src="/_layouts/15/1049/strings.js"></script>
<script type="text/javascript" src="/_layouts/15/sp.ui.dialog.js"></script>
<script type="text/javascript" src="/SiteAssets/_js/jquery-3.3.1.min.js"></script>
<script type="text/javascript" src="/SiteAssets/_js/bootstrap.min.js"></script>
<script type="text/javascript" src="/SiteAssets/_js/sharepointplus-5.2.min.js"></script>

html正文:

<div data-role="form" class="container form">

    <div data-field="Title">
            <label class="form_label required">Title:</label><br>
            <input class="form_field required" value=""></input>
        </div>

        <div id="fileUploadControl" > 
        <label class="form_label required">Document selection:</label><br/> 
        <input id="fileUploadInput" class="form_field" type="file"/> 
        </div>

    <hr>

    <div class="btn_panel">
        <input type="button" class="btn" id="save_btn" name="Save" value="Save" onclick="_uploadFile();"> 
        <input type="button" class="btn" id="cancel_btn" name="Cancel" value="Cancel">
    </div>

</div>

JS功能:

function _uploadFile() {

  var Title = $('div[data-field="Title"] input').val();

  var files = document.querySelector('#fileUploadInput').files;

  files = Array.prototype.slice.call(files);
  // read the files
  Promise.all(files.map(function(file) {
    return new Promise(function(prom_res, prom_rej) {
      // use fileReader
      var fileReader = new FileReader();
      fileReader.onloadend = function(e) {
        file.content = e.target.result;
        prom_res(file);
      }
      fileReader.onerror = function(e) {
        prom_rej(e.target.error);
      }
      fileReader.readAsArrayBuffer(file);
    });
  })).then(function(files) {
    // upload files
    return Promise.all(files.map(function(file) {
      return $SP().list("8D5132D2-A458-4961-BCD6-FFD9CE964C0F").createFile({ //Doc lib UID
        content:file.content,
        filename:file.name,
        fields:{
            "Title":Title
          }
      });
    }))
  }).then(function(file) {
        alert(file[0].Name+" has been uploaded");
        console.log("Document " + file[0].Name+" has been uploaded to the Outgoing documents library");
    }, function(error) {
        console.log("Error: ",error);
    });
}

Firefox控制台中的错误是

未捕获的例外:[SharepointPlus'cre​​ateFile']:文件内容是必需的。

调试文件对象的内容表明它存在(显示字节大小)。错误处理程序不返回错误文本消息。在第二次单击相同的表单(不刷新页面)时,将上载文件并给出成功消息。如果遇到SharePoint,JQuery或SharepointPlus问题,或者遇到一些冲突,我会陷入困境。通常,第一次单击就可以上传文件,因为相同的代码可以在其他现有库上使用。

答案

问题已解决。实际上,问题不在代码中,它可以正常工作,但在页面iself中。尽管我包括所有SP依赖项,但只有将代码放入SP本机页面时,该代码才起作用。

以上是关于仅通过第二次单击即可使用JQuery和SharePointPlus js lib上传到SharePoint库的文件的主要内容,如果未能解决你的问题,请参考以下文章

模态仅在第二次单击后显示

日历验证错误仅在第二次通过 Jquery UI 选择日期后才消失

jQuery 提交仅在第二次点击后工作

jQuery 在第二次单击时删除类并在第二次单击时禁用悬停

Jquery .remove() 仅在第二次点击时起作用

第二次单击时的 jQuery 不起作用 - 移动设备