2014-09-29 27 views
0

我試圖沒有成功地使用$ .post函數來測試(通過調用PHP函數「is_dir」的web服務)如果一個文件夾已經存在於服務器上,然後我希望它在我繼續動態編寫將放置在那裏的新文件之前返回字符串或布爾值回到我的JavaScript頁面。要測試的文件夾的文件路徑是使用捕獲表單數據的jQuery「構建」的。我需要定義(在變量中)目錄是否存在,然後能夠從$ .post函數外部訪問該變量(而不是從內部使用成功回調)。這是這樣我就可以在JavaScript進行如下操作:

如果{目錄存在}然後 捕獲更多的表格數據(通過jQuery)和 $。員額到Web服務調用PHP更新數據庫

外的$ .post函數,我的返回變量的值是未定義的。

我想我可能會過度複雜化。有什麼建議麼?先謝謝你。

+1

分享了一下你的代碼,如果你在JavaScript的開始定義VAR folderExist,並將其設置在$。員額folderExist = 1;它可以在任何範圍內訪問 – BojanT 2014-09-29 21:26:55

+1

我想你是在誤解如何編寫異步代碼 - post函數在得到響應之前立即返回,所以你的變量在那時不會被定義。這是回調的目的。你**可以**使用更詳細的'$ .ajax'函數,它有一個參數,你可以設置一個同步請求,但同步ajax很少是個好主意。 – Steve 2014-09-29 21:28:50

+1

@Steve我有一個預感,我的問題源於異步代碼的不正確使用 - 您的意見非常清楚地解釋它,謝謝。我重寫了我的代碼,在我的主函數(post_FormData)中包含了目錄驗證$ .post函數,從而能夠訪問$ .post函數中的結果json數據。對DB的後續更新也被編碼爲$ .post函數中定義的onclick事件。我將分享下面的代碼。 – SukieC 2014-09-30 15:31:29

回答

1

請參閱我的評論以上@Steve:

<script type='text/javascript'> 

    //function gathers form data, validates constructed file path and then writes to DB 
    function post_FormData() { 

     var week_number   = $("#form_week_number").val(); 
     var program    = $("#form_program").val(); 
     var course    = $.trim($("#form_course_number").val()); 
     var form_content_type = $("input:radio[name=content_type]:checked").val(); 
     var content_type   = "";  
     var activity_title_Val = $.trim($("#form_activity_name").val()); 
     var activity_title_Split = activity_title_Val.split(" "); 
     var activity_title_Clean = new Array(); 

     //this for-loop constructs a valid directory folder name from form data 
     for(var i=0, l=activity_title_Split.length; i<l; i++) { 

      activity_title_Split[i] = activity_title_Split[i].replace(/[^a-z0-9\s]/gi,""); 
      activity_title_Clean[i] = activity_title_Split[i]; 
      activity_title_Split[i] = activity_title_Split[i].replace(/\b[a-z]/g, function(letter){return letter.toUpperCase();}); 
     } 

     var activity_title = activity_title_Split.join(""); 

     var file_path = ""; 

     file_path  += "/CourseFiles/" + program + "/" + program + course + "/" + content_type + "/Week" + week_number + "/activity-" + activity_title; 

     var message = "<div id=\"confirmation_container_contents\"><p><b>Confirm Content Repository file path: </b><br></p>"; 

     //begin web service call to PHP function 
     $.post('webservices/create_PA_webservices.php', {web_service: "go_check_if_exists", data_file_path: file_path}, function(data){ 

      var exists = data.does_exist; //json_encoded RESPONSE FROM ASYNC REQUEST 

      if(exists == "Y") { 

       message += file_path; 
       message += "<br><br><br><center><b>An activity folder with this name already exists.</b></center>"; 
       message += "<br><br><center>Please edit the activity title and resubmit.</center>"; 
       message += "<br><br><br><center><input type=\"image\" src=\"pa_images/editButton.jpg\" id=\"editButton\" value=\"edit\"></center></div>"; 

       $("#confirmation_container").empty(); 
       $("#confirmation_container").append(message); 

      } 
      else if(exists == "N") { 

       message += file_path; 
       message += "<br><br><center><input type=\"image\" src=\"pa_images/editButton.jpg\" id=\"editButton\" value=\"edit\">"; 
       message += "&nbsp\;&nbsp\;&nbsp\;<input type=\"image\" src=\"pa_images/confirmButton.jpg\" id=\"confirmButton\" value=\"confirm\"></center></div>"; 

       $("#confirmation_container").empty(); 
       $("#confirmation_container").append(message); 

      } 

      $(function(){//edit proposed file path 

       $("#editButton").click(function() { 

        $("#confirmation_container").empty(); 

       });//end function edit path button 

      });//end anonymous function 


      $(function(){//confirm proposed file path and write to DB 

       $("#confirmButton").click(function() { 

        go_post_FormData(activity_title_Val, file_path, week_number, program, course, content_type); 
        $("#create_practice_activity").hide(); 
        $("#build_practice_activity").show(); 
        $("#activity_is_new").val("N"); 

       });//end function confirm path button 

      });//end anonymous function 


     }, "json").fail(function() {alert("The go_check_if_exists webservice call has failed");}); //end web service call 

    }//end function post_FormData declaration 

    </script>