我想解决我的这个问题:我在window.load上做了两个ajax调用,它看起来像第二个AJAX响应重写第一个函数之前我可以继续它或者我犯了一些错误......无论如何,如果不进行同步调用,我无法解决问题,而且由于显而易见的原因,我不想那么做。第二个AJAX响应重写第一个(JS,JSON)
因此,这里是我的代码(JavaScript)的创建新的XMLHttpRequest:
function createRequest(){
if(window.XMLHttpRequest)
return new XMLHttpRequest;
else
return new ActiveXObject("Microsoft.XMLHTTP");
}
我的发送请求功能(发送它们)
function sendRequest(url, callback){
request = createRequest();
if(typeof callback === 'function'){
request.onreadystatechange = callback();
}
request.open("GET", url, true);
request.send();
}
,最后我的回调
function handleData(){
return function(){
if (request.readyState == 4 && request.status == 200) {
serverResponse = JSON.parse(request.responseText);
switch(Object.keys(serverResponse)[0]){
case "a": function1(serverResponse.a,"a"); break;
case "b": function2(serverResponse.b,"b"); break;
}
}
}
我正在创建如下电话:
window.onload = function() {
sendRequest('url' , handleData);
sendRequest('url2', handleData);
}
注意:正如您所看到的,这是我的代码的简化版本。 在交换机中,我调用了function1和2,这些函数实际上是处理来自服务器的JSON响应。我正在使用不同的json响应在同一个域上的两个不同url上进行调用。 另外,当我只有一个调用它效果很好(他们都)...问题只发生在我试图使2连续 - 而当我打两个电话只有第二个处理权。这就是为什么我想第一次覆盖。
我试图让两个函数handleData所以用开关有handleData1()
和handleData2()
,而不是单一的handleData()
,所以我打电话给他们这样的:
window.onload = function() {
sendRequest('url' , handleData1);
sendRequest('url2', handleData2);
}
,但我碰到的问题,其中第二Ajax响应(总是第二个电话),但只有第二个成功。然后我把console.log(request)
在这两个新兴的,而且我只得到JSON的第二个功能尝试与第二个函数进行处理。(一无所知第一个)有时被称为多次像4
顺便说一句handleData2
秒功能不取决于来自handleData1
的数据。
如果任何问题请不要问:)谢谢
'函数handleData(请求){'期待一个说法,但是你不传递任何它:'回调();'。 'request = createRequest();'创建一个**全局**变量。你不想那样。总是使用'var'。 –
谢谢,我没有意识到,解决我的问题,那个论点是错误的...所以现在我知道为什么我的第二次覆盖第一:D我真的觉得很愚蠢...... – Pauli