$。getScript第二次不执行

问题描述 投票:0回答:1

enter image description here i我尝试通过使用客户端脚本或$ .getScript()函数将多个文件上载到SharePoint列表中,而第二次迭代仅执行一次,它将不响应(任何异常)。我曾尝试启用现金,但没有运气。

$.getScript(scriptbase + "SP.RequestExecutor.js", function () {
  var createitem = new SP.RequestExecutor(_spPageContextInfo.webServerRelativeUrl);
      createitem.executeAsync({
      url: _spPageContextInfo.webServerRelativeUrl + "/_api/web/lists/GetByTitle('" + listName + "')/items(" + id + ")/AttachmentFiles/add(FileName='" + file.name + "')",
      method: "POST",
      binaryStringRequestBody: true,
      body: binary,
      success: fsucc,
      error: ferr,
      state: "Update"
  });
  function fsucc(data) {
      console.log(data + ' uploaded successfully : '+file.name);                
      deferred.resolve(data);
  }
  function ferr(data) {
      console.log(fileName + "not uploaded error");
      deferred.reject(data);

  }
});
jquery sharepoint-2013
1个回答
0
投票

以下示例代码供您参考。

<script type="text/javascript" src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.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="https://cdn.jsdelivr.net/npm/[email protected]/jquery.MultiFile.min.js"></script>
<link rel="Stylesheet" type="text/css" href="../CSS/App.css" />
<script language="javascript" type="text/jscript">
    $(function () {
        var fileCountCheck = 0;
        $("#btnSubmit").click(function () {
            var data = [];
            var fileArray = [];
            $("#attachFilesContainer input:file").each(function () {
                if ($(this)[0].files[0]) {                    
                    fileArray.push({ "Attachment": $(this)[0].files[0] });                    
                }
            });
            var listTitle=$("#txtListTitle").val().trim();
            data.push({"Title": $("#txtFieldTitle").val().trim(), "Files": fileArray});            
            createItemWithAttachments(listTitle, data).then(
                function(){
                    alert('Item created with Multiple attachments');
                },
                function(sender, args){
                    console.log('Error occured' + args.get_message());
                }
            )

        });

        var createItemWithAttachments = function(listName, listValues){         
            var fileCountCheck = 0;
            var fileNames;          
            var context = new SP.ClientContext.get_current();
            var dfd = $.Deferred();
            var targetList = context.get_web().get_lists().getByTitle(listName);
            context.load(targetList);
            var itemCreateInfo = new SP.ListItemCreationInformation();
            var listItem = targetList.addItem(itemCreateInfo);   
            listItem.set_item("Title", listValues[0].Title);             
            listItem.update();
            context.executeQueryAsync(
                function () {
                    var id = listItem.get_id();
                    if (listValues[0].Files.length != 0) {
                        if (fileCountCheck <= listValues[0].Files.length - 1) {
                            loopFileUpload(listName, id, listValues, fileCountCheck).then(
                                function () {
                                },
                                function (sender, args) {
                                    console.log("Error uploading");
                                    dfd.reject(sender, args);
                                }
                            );
                        }
                    }
                    else {
                        dfd.resolve(fileCountCheck);
                    }
                },   
                function(sender, args){
                    console.log('Error occured' + args.get_message());              
                }
            );
            return dfd.promise();           
        }

        function loopFileUpload(listName, id, listValues, fileCountCheck) {
            var dfd = $.Deferred();
            uploadFile(listName, id, listValues[0].Files[fileCountCheck].Attachment).then(
                function (data) {                      
                    var objcontext = new SP.ClientContext();
                    var targetList = objcontext.get_web().get_lists().getByTitle(listName);
                    var listItem = targetList.getItemById(id);
                    objcontext.load(listItem);
                    objcontext.executeQueryAsync(function () {
                        console.log("Reload List Item- Success");                                        
                        fileCountCheck++;
                        if (fileCountCheck <= listValues[0].Files.length - 1) {
                            loopFileUpload(listName, id, listValues, fileCountCheck);
                        } else {
                            console.log(fileCountCheck + ": Files uploaded");
                            alert('Item created with Multiple attachments');                            
                        }
                    },
                    function (sender, args) {
                        console.log("Reload List Item- Fail" + args.get_message());
                    });                  

                },
                function (sender, args) {
                    console.log("Not uploaded");
                    dfd.reject(sender, args);
                }
           );
           return dfd.promise();
        }

        function uploadFile(listName, id, file) {
            var deferred = $.Deferred();
            var fileName = file.name;
            getFileBuffer(file).then(
                function (buffer) {
                    var bytes = new Uint8Array(buffer);
                    var binary = '';
                    for (var b = 0; b < bytes.length; b++) {
                        binary += String.fromCharCode(bytes[b]);
                    }
                    var scriptbase = _spPageContextInfo.webServerRelativeUrl + "/_layouts/15/";
                    console.log(' File size:' + bytes.length);
                    $.getScript(scriptbase + "SP.RequestExecutor.js", function () {
                        var createitem = new SP.RequestExecutor(_spPageContextInfo.webServerRelativeUrl);
                        createitem.executeAsync({
                            url: _spPageContextInfo.webServerRelativeUrl + "/_api/web/lists/GetByTitle('" + listName + "')/items(" + id + ")/AttachmentFiles/add(FileName='" + file.name + "')",
                            method: "POST",
                            binaryStringRequestBody: true,
                            body: binary,
                            success: fsucc,
                            error: ferr,
                            state: "Update"
                        });
                        function fsucc(data) {
                            console.log(data + ' uploaded successfully');
                            deferred.resolve(data);
                        }
                        function ferr(data) {
                            console.log(fileName + "not uploaded error");
                            deferred.reject(data);
                        }
                    });

                },
                function (err) {
                    deferred.reject(err);
                }
            );
            return deferred.promise();
        }
        function getFileBuffer(file) {
            var deferred = $.Deferred();
            var reader = new FileReader();
            reader.onload = function (e) {
                deferred.resolve(e.target.result);
            }
            reader.onerror = function (e) {
                deferred.reject(e.target.error);
            }
            reader.readAsArrayBuffer(file);
            return deferred.promise();
        }
    }); 
</script>
<div class="fld">
    <div>
        <span>List Title</span>
        <span><input type="text" id="txtListTitle"></span>  
    </div>
    <div>
        <span>Field Title</span>
        <span><input type="text" id="txtFieldTitle"></span> 
    </div>
    Attach any relevant files
    <div class="files" id="attachFilesContainer">
        <input id="infringementFiles" type="file" class="multi browsebtn" />
    </div>
</div>
<div class="fld">
    <input class="btn" id="btnSubmit" value="Submit" type="button" />
</div>

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.