2014-09-29 71 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>