0

我在我的 html 页面上使用 ajax 从 MySql db 加载数据并重新加载并在某些事件上发送电子邮件通知,在 html 页面上选择后 - ajax 调用 script.php 向 db 发出请求并返回结果,它工作得很好;同时我使用显示和隐藏 ajax 加载器图像的函数,直到执行查询,但它调用我的 php 脚本两次,以便每次发送两次电子邮件

<script src="//ajax.aspnetcdn.com/ajax/jQuery/jquery-1.9.1.js"></script>

<script>
function showUser(str)
{
    if (str=="")
    {
        document.getElementById("txtHint").innerHTML="";
        return;
    }
    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 (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
        }
    }
    xmlhttp.open("GET","../getuser.php?q="+str,true);
    xmlhttp.send();
}

// ajax loader image

function getuser(str){
    $.ajax({
        url: "http://site.com/getuser.php?q="+str,
        beforeSend: function (XMLHttpRequest)
        {
            $("#loading").show();
        }
    })
    .done(function ( data ) {
        $("#txtHint").html(data);
        $("#loading").hide();
    });
}
$(document).ready(function(){
    $("select[name='users']").change(function () {
        getuser($("option:selected", this).val());
    });
});
</script>

如何改进此代码以仅一次调用 php 脚本?

HTML

<form>
    <select name="users" onchange="showUser(this.value)"> 
        <option value="">Select a user:</option>
        <option value="1">User1</option>
        <option value="2">User2</option>
    </select>
</form>
<div style="display:none" id="loading">
    <p><img src="../loader.gif" /></p>
</div>
<br>
<div id="txtHint"><b>User info will be listed here.</b></div>
4

2 回答 2

1

从以下位置删除 onchange 事件:

<select name="users" onchange="showUser(this.value)"> 
于 2013-02-18T13:21:49.463 回答
0

你用showUser什么?这似乎就足够了;

function getuser(str) {
  $.ajax({
    url: "/getuser.php?q=" + str, // No need to include the domain here
    beforeSend: function (jqXHR) {
       $("#loading").show();
    }
  }).done(function(data) {
    $("#txtHint").html(data);
    $("#loading").hide();
  });
}

$(document).ready(function() {
  $("select[name='users']").change(function() {
    getuser($(this).val());
  });
});
于 2013-02-18T13:20:59.407 回答