【问题标题】:$.getScript not executing for second time$.getScript 没有第二次执行
【发布时间】:2019-10-29 17:34:59
【问题描述】:

enter image description here我正在尝试通过使用客户端脚本将多个文件上传到 SharePoint 列表,也许 $.getScript() 函数只执行一次第二次迭代它不会响应(任何例外)。我试过启用现金,但没有运气。

$.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】:

    以下示例代码供您参考。

    <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/jquery-multifile@2.2.2/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>
    

    【讨论】:

      猜你喜欢
      • 2013-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-26
      • 1970-01-01
      • 2019-07-06
      相关资源
      最近更新 更多