我已经设置了Sharepoint 2013网站。我在主页上添加了一个Web部件,它对外部API进行ajax调用,并返回JSON数据,显示图像和链接。当您在Chrome中访问该网站时,它运行正常,但在Internet Explorer(11)中,它无法正常工作。奇怪的是我知道它正在运行JS,因为它显示了第二行的“No Current News”p标签。这是我的代码:
<h1 style="text-align: center">PQA In The News</h1>
<div id="myNewsFeed"><p>No Current News</p></div>
<script src="http://code.jquery.com/jquery-1.11.3.min.js"></script><script src="http://code.jquery.com/jquery-migrate-1.2.1.min.js"></script><script type="text/javascript">
$(document).ready(function() {
document.getElementById("myNewsFeed").innerHTML = "<p>No Current News</p>";
var d = new Date();
var n = d.getTime();
var mo = 86400000 * 30;
n = n - mo;
var queryString = "https://webhose.io/search?token=xxxx&format=json&q=Company%20Name&ts=" + n;
loadJSON(queryString);
function loadJSON(newsURI){
var data_file = newsURI;
var http_request = new XMLHttpRequest();
try{
// Opera 8.0+, Firefox, Chrome, Safari
http_request = new XMLHttpRequest();
}catch (e){
// Internet Explorer Browsers
try{
http_request = new ActiveXObject("Msxml2.XMLHTTP");
}catch (e) {
try{
http_request = new ActiveXObject("Microsoft.XMLHTTP");
}catch (e){
// Something went wrong
alert("Your browser broke!");
return false;
}
}
}
http_request.onreadystatechange = function(){
if (http_request.readyState == 4 ){
var jsonObj = JSON.parse(http_request.responseText);
DisplayData(jsonObj);
}
}
http_request.open("GET", data_file, true);
http_request.send();
}
function DisplayData(data) {
var htmlSource = "<ul>";
for(var i=0; i < data.posts.length; i++) {
htmlSource += "<li><a href=\"" + data.posts[i].url + "\"><img src=\"" + data.posts[i].thread.main_image + "\" height=\"150px\" width=\"150px\">" + data.posts[i].title + "</a></li>";
}
htmlSource += "</ul>"
document.getElementById("myNewsFeed").innerHTML = htmlSource;
}
});</script>
我更改了查询字符串,因为它有我公司的密钥,但我可以保证它有效。在Chrome上,这显示一切正常,但在IE中它只显示“No Current News”。
我做错了什么,或者Internet Explorer是否有针对Ajax的内容?
答案 0 :(得分:1)
根据Kalamarico的建议,最好的方法是使用jquery ajax调用,并添加失败处理程序以检查确切的错误。在上面的代码中,您的javascript调用正在运行,但它可能不会进入就绪状态4,因此不会设置该值。你可以检查其他状态,也不应该是在其他内部的readystatechange事件内的http请求调用,否则在达到就绪状态4后它也将再次触发。