2017-06-19 53 views
-2

我正在构建一个Q/A网站。当用户点击一个特定的问题时,他被重定向到用户可以发布答案的问题页面。ajaxStart()和ajaxStop()函数未被触发

现在,问题是,当用户点击“答案”链接,很少有东西在后台处理像更新数据库,发送邮件等。我试图在UI中显示负载指示器,但AJAX功能没有被触发。

这里是我的代码:

HTML:

<span id="msg"><img src="ajax-loader.gif"/></span> 
<a id="sub-link" href="javascript:void(0)" onclick="loadAnswerList(document.getElementById('user-ans').value,<?php echo $qid; ?>,'<?php echo $posted_by; ?>')">Answer</a> 

JS:

$(document).ajaxStart(function() { 
    $('#msg').show(); 
}).ajaxStop(function() { 
    $('#msg').hide(); 
}); 

AJAX请求

function loadAnswerList(ans,qid,postedBy,page) { 
    if (window.XMLHttpRequest) { 
      // code for IE7+, Firefox, Chrome, Opera, Safari 
     xmlhttp = new XMLHttpRequest(); 
    } 
    else { 
     // code for IE6, IE5 
     xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    xmlhttp.onreadystatechange = function() { 
     if (this.readyState == 4 && this.status == 200) { 
      document.getElementById("ans_container").innerHTML = this.responseText; 
     } 
    }; 
    xmlhttp.open("GET","load_answers.php?ans="+ans+"&qid="+qid+"&postedBy="+postedBy+"&page="+page,true); 
    xmlhttp.send(); 
} 

我也尝试添加$(文件)。就绪(function(){....});在ajax之上,但仍然不起作用。我错过了什么?

正在使用jQuery 3.2.1版本

+0

您能否请您将AJAX代码添加到问题中 –

+0

谢谢。添加。请建议可以做些什么。 – venky

+1

,因为该Ajax调用不是jQuery的Ajax调用。如果你想在使用前后使用jQuery的Ajax方法。 – epascarello

回答

2

jQuery不支持原生XMLHttpRequest对象。您使用的ajaxStart和ajaxEnd行处理它们的api。所以为了使用它,你需要使用jQuery的.ajax().get()方法。

0

感谢您的详细信息。 这是修改后的功能:

function loadAnswerList(ans,qid,postedBy,page) { 
var answer=ans; 
var qstnid=qid; 
var postby=postedBy; 
var pg=page; 

var request = $.ajax({ 
    type: "GET", 
    url: "load_answers.php?ans="+ans+"&qid="+qid+"&postedBy="+postedBy+"&page="+page", 
    data: {ans: answer, qid: qstn_id, postedBy: postby, page: pg}, 
    dataType: "html" 
}); 

request.done(function(msg) { 
    alert ("Response: " + msg); 
}); 

request.fail(function(jqXHR, textStatus) { 
    alert("Request failed: " + textStatus); 
}); 

} 

,如果我错了请纠正我。还有一件事 - 我想显示从PHP页面到特定div的响应,就像我在之前的ajax请求中所做的一样。

document.getElementById("ans_container").innerHTML = this.responseText; 

我该怎么做?