2016-12-07 2 views
-2

Что я не понимаю, когда запрос ajax, когда вы вызываете выполненную функцию, нужно делать правильно? Ну, я не получаю значения, пока не использую установленное время. Тогда я получаю свои результаты, почему? Я не понимаю!JavaScript Ajax Request

{"status": "1", "msg": "Return Successful", "callbackFunct": "LinkMenu.setMenuItems()", "return": [{"name": "save", "image ":"», "действие": "", "статус": ""}, { "имя": "назад", "образ": "", "действие": "", "статус": ""} , { "имя": "удалить", "образ": "", "действие": "", "статус": ""}]}

class ServerQuery { 

constructor(request, level) { 
    console.log("Server query started, " + request + " " + level); 
    this.lev = level; 
    this.file = "http://" + location.hostname + "/" + this.lev + "/" + request; 
    this.values = new Object(); 
    this.data = new Array(); 
    this.result  = null; 
    this.setRequiredValues(); 
} 

setRequiredValues() { 
    console.log("Setting required Values"); 
     let ses = document.getElementById("key").value; 
     let orgid = document.getElementById("OrgId").value; 
     let userid = document.getElementById("userid").value;    
     this.values['key'] = ses; 
     this.values['orgid'] = orgid; 
     this.values['userid'] = userid; 
     console.log("Required Values loaded: " + JSON.stringify(this.values));   
} 

addValue(key, insert) { 
    console.log("adding Values " + key + " " + JSON.stringify(insert)); 
    this.r = new Object(); 
    this.r[key] = insert; 
    this.data.push(this.r); 
    console.log("Values Added " + JSON.stringify(this.data));    
} 

// select this method to trigger a return callback 
sendRequest() { 
    console.log("Server Query sending Request"); 
    connect_ajax(); 

    // this.values is an object 
    this.values['linked'] = this.data; 
    let req = JSON.stringify(this.values); 
    let uandp = "requesting=" + req; 
     console.log("Data adding " + uandp); 
     $.post(this.file, uandp) 
      .done(function done2(result) { 
       console.log("server query finsihed with this result " + result); 
       this.r = JSON.parse(result); 
       if (this.r.status == 1) { 
        console.log("ServerQuery after parse " + this.r); 
        console.log("output " + this.r.callbackFunct); 
        if (typeof this.r.callbackFunct != 'undefined') { 
         setTimeout(function() { 
          this.r.callbackFunct(this.r.callbackVars); 
         }, 500); 
        } else { 
         alert("Callback Not set"); 
        } 
       } 
       else if (this.r.status == 3) { 
        alert(this.r.msg); 
       } 
      }) 
      .fail(function processFailed() { 
       console.log("an Error has occured"); 
      }) 
      .always(function processAlways() { 
       console.log("Finished"); 
      }); 
     console.log("Requesting url " + this.file); 

} 

// select this method to get a static response from server 
callRequest() { 
    console.log("starting serverquery process() "); 
    let answer = this.process(); 
    console.log("process returned " + answer); 
    return answer; 

} 

process() { 
    this.values['linked'] = this.data; 
    let req = JSON.stringify(this.values); 
    let uandp = "requesting=" + req; 
    let file = this.file; 
     console.log("Data adding " + uandp); 
    let return_first = function() { 
    let tmp = null; 
    $.ajax({ 
     'async': false, 
     'type': "POST", 
     'global': false, 
     'dataType': 'html', 
     'url': file, 
     'data': uandp, 
     'success': function (data) { 
      tmp = data; 
     } 
    }); 
    return tmp; 
    }(); 
    return return_first; 
} 

cleanUp() { 
    delete this.file; 
    delete this.values   
    console.log("removed values from global " + this.values); 
    console.log("removed file from global " + this.file); 
} 
} 
+0

Try (а) Форматирование кода правильно (ваш отступ выключен, чтобы биты него не помечаются как код и другие биты него не ясны) (б) обеспечение [mcve] (вы» у меня есть два разных вызова Ajax в этом, и я не совсем уверен, какие из них вы говорите, сосредоточьтесь на ** минимальном **) и (c) описываете, где именно происходит нарушение, какой результат вы ожидаете и какой результат вы получаете (у вас много команд console.log, что они говорят и что вы ожидаете от них)? – Quentin

+0

'.fail (function processFailed() { console.log (" произошла ошибка "); })' этот код работает? – demo

+0

Если вы уже используете jquery, я думаю, что его будет проще использовать везде – demo

ответ

-1

причина происходит потому, что метод возвращает даже если у вас есть асинхронный вызов $ .post, который все еще выполняется (т. е. он еще не вернулся). Поэтому я считаю, что вы видите то, чего не ожидаете.

Если вы вызываете функцию (назовем ее ProcessResult), которую вы передали, тогда вы можете вызвать эту функцию ProcessResult после вызова $ .post.

sendRequest(caller, myDelegateFunction) { 
    $.post(this.file, uandp) 
      .done(function done2(result) { 
       // this invokes a function and passes in result as a parameter. 
       myDelegateFunction.call(caller, result); 
      }); 
} 

// now you can call this like this: 
function ProcessResult(result) { 
    console.log(result); 
} 
sendRequest(this, Hello); // invoke sendRequest function, and pass in 'this' and 'Hello' function. 

// or like this: 
sendRequest(this, function(result) { 
    console.log(result); 
});