2016-08-10 232 views
2

有人可以看看下面的代码帮我弄清楚我做错了什么吗?我收到此错误JavaScript HTTP请求失败

错误的XMLHttpRequest {readyState的:1,超时:0,withCredentials: 假,上传:XMLHttpRequestUpload,responseURL: “” ...}

当我试图让请求NASA图像galary获取一个图像..

HTML:

<img id="map" src="" alt="image from NASA"> 

JS:

var get = function(url){ 
    return new Promise(function(resolve,reject){ 
     var xhr = new XMLHttpRequest(); 
     xhr.onreadystatechange = function(){ 
      if(xhr.readyState === 4 && xhr.status == 200){ 
       var result = xhr.responseText; 
       result = JSON.parse(result); 
       resolve(result); 
      }else { 
       reject(xhr); 
      } 
     } 
     xhr.open("GET",url,true); 
     xhr.send(null); 
    }) 
} 

get('https://api.nasa.gov/planetary/apod?api_key=NNKOjkoul8n1CH18TWA9gwngW1s1SmjESPjNoUFo' 
) 
.then(function(response){ 
    console.log("success",response); 
    document.getElementById('map').src = response.url; 
}) 
.catch(function(err){ 
    console.log('error',err) 
}) 
+0

HTML模板是image from NASA

回答

1

你else语句是放错了地方

Ajax请求会突破这些不同的状态

State Description 
0  The request is not initialized 
1  The request has been set up 
2  The request has been sent 
3  The request is in process 
4  The request is complete 

,因为这些国家改变readyState事件将触发,这就是为什么我们要检查一下第四个状态是触发回调的状态,当请求完成时,我们有返回的数据。

您使用的是else语句,将火上1,或任何状态,除了4真的,但1是第一readyState的,当请求被首先建立,你必须等待,直到它达到第四readyState的

var get = function(url){ 
    return new Promise(function(resolve,reject){ 
     var xhr = new XMLHttpRequest(); 
     xhr.onreadystatechange = function(){ 
      if(xhr.readyState === 4) { 
       if (xhr.status == 200) { 
        var result = xhr.responseText; 
        result = JSON.parse(result); 
        resolve(result); 
       }else { 
        reject(xhr); 
       } 
      } 
     } 
     xhr.open("GET",url,true); 
     xhr.send(null); 
    }) 
} 

FIDDLE

+0

非常感谢你!!!!刚拿到固定 –

+0

不客气! – adeneo