从数据库获取后无法将值赋给变量

时间:2018-10-31 01:59:03

标签: javascript jquery html ajax

从数据库获取值后,结果未分配给变量。下面是我的代码。提醒arr结果返回值,但提醒eventimage和Speakerimage为空

    var file_data = $('#pic').prop('files')[0];
    var form_data = new FormData();  // Create a FormData object
    form_data.append('file', file_data);  // Append all element in FormData  object

    $.ajax({
            url         : serverURL() + "/upload.php",    

            cache       : false,
            contentType : false,
            processData : false,
            data        : form_data,                         
            type        : 'post',
            success     : function(arr){
                    alert(arr[0].result);

                  imgNewUserPictureName = (arr[0].result);   

            }
     });




    var file_data1 = $('#pic1').prop('files')[0];
    var form_data1 = new FormData();  // Create a FormData object
    form_data1.append('file', file_data1);  

    $.ajax({
            url         : serverURL() + "/upload1.php",    

            cache       : false,
            contentType : false,
            processData : false,
            data        : form_data1,                         
            type        : 'post',
            success     : function(arr){

                alert(arr[0].result);

                  imgNewUserPictureName1= (arr[0].result);         
            }
     });



    var eventimage = imgNewUserPictureName;
    var speakerimage = imgNewUserPictureName1;

2 个答案:

答案 0 :(得分:0)

ajax函数完成之前的变量分配肯定会引发未定义或空值。这是预期的,因为ajax尚未完成。

有两种方法。回调或异步。但是在这种情况下,回调更为简洁,并且不会阻止用户体验。

看看这个例子

   function assignToVar(response){
    var assign = response;
    alert(assign.title)
   }

   $(document).ready(function(){

      $.ajax({
            url         :"https://jsonplaceholder.typicode.com/todos/1", 
            cache       : false,
            contentType : false,
            processData : false,                     
            type        : 'get',
            success     : assignToVar
     });

   });

在回调中进行分配,最重要的是,在ajax函数完成后调用分配的值。

JS Fiddle在这里 http://jsfiddle.net/keysl183/nb029qcL/4/

答案 1 :(得分:0)

Ajax是异步的,请使用回调函数

var eventimage = '';
var speakerimage = '';

var file_data = $('#pic').prop('files')[0];
var form_data = new FormData(); // Create a FormData object
form_data.append('file', file_data); // Append all element in FormData  object

var file_data1 = $('#pic1').prop('files')[0];
var form_data1 = new FormData(); // Create a FormData object
form_data1.append('file', file_data1);

// the magic
function RequestCallback() {
  console.log(eventimage)
  console.log(speakerimage)
}


$.ajax({
  url: serverURL() + "/upload.php",
  cache: false,
  contentType: false,
  processData: false,
  data: form_data,
  type: 'post',
  success: function(arr) {
    alert(arr[0].result);

    eventimage = (arr[0].result);

    $.ajax({
      url: serverURL() + "/upload1.php",
      cache: false,
      contentType: false,
      processData: false,
      data: form_data1,
      type: 'post',
      success: function(arr) {
        alert(arr[0].result);

        speakerimage = (arr[0].result);
        // eventimage and speakerimage is set, run callback function
        RequestCallback()
      }
    });

  }
});