[英]Ajax query for script loading is running only once
我有一个JavaScript脚本来发送ajax请求。 PHP脚本发送回文本,该文本将插入脚本标记中。 问题是它只能工作一次。 该脚本有效。 但是,当我在按钮上执行其他操作时,脚本的结果不会更改(实际上,我的PHP脚本返回一个随机数)。
我的代码在这里。 我希望我清楚...
<script type="text/javascript">
$(function()
{
$('#submit').bind('click', function(){request(useData)});
});
// fonction pour la requête ajax
var xhr =null;
function request(callback)
{
if (xhr && xhr.readyState != 0)
{
xhr.abort(); // On annule la requête en cours !
}
// instanciation (globale) de l'objet pour l'envoi de la requête
xhr = getXMLHttpRequest();
xhr.onreadystatechange = function()
{
if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0))
{
callback(xhr.responseText);
document.getElementById("loader").style.display = "none";
}
else if (xhr.readyState < 4)
{
document.getElementById("loader").style.display = "inline";
}
};
// définition et protection des variables
var title = encodeURIComponent($('#title').val()) ;
// envoi
xhr.open('POST', 'generate.php', true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.send('title=' + title);
// juste pour voir quand la requête a été executée - a enlever en prod
$('#test').text(Math.random()+title);
}
// fonction pour le traitement des éléments reçus
function useData(sData)
{
$('#scriptGraph').text(sData);
}
</script>
</head>
<body>
<script src="js/highcharts.js"></script>
<script src="js/modules/exporting.js"></script>
<input type="text" name="title" id="title">
<input type="submit" value="Update" id="submit">
<script id="scriptGraph" type="text/javascript"></script>
根据要求,我将PHP页面的代码添加到getXMLHttpRequest()函数的代码中。 PHP:
<?php
$title = $_POST['title'] ;
echo "alert('".$title.rand()."');" ;
?>
实例XHR的功能:
function getXMLHttpRequest() {
var xhr = null;
if (window.XMLHttpRequest || window.ActiveXObject) {
if (window.ActiveXObject) {
try {
xhr = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
} else {
xhr = new XMLHttpRequest();
}
} else {
alert("Votre navigateur ne supporte pas l'objet XMLHTTPRequest...");
return null;
}
return xhr;
}
先感谢您!
我发现了我的问题! 我必须评估Ajax查询的结果。
因此,我使用Ajax查询结果的代码是:
function useData(sData)
{
eval(sData);
}
我没有尝试,但是我认为另一种解决方案是:每次单击按钮时删除脚本标记并创建一个新标记。
当然,您正在中止AJAX对象
xhr.abort();
// on annule larequêteen cours!
if (xhr && xhr.readyState != 0)
{
xhr.abort(); // On annule la requête en cours !
}
仅在第一次request not initialized
时, readyState
才为null。 尝试使用该方法,尽管可能并非如此。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.