AJAX调用ASP页面来更新数据库记录只能在IE9中运行一次

时间:2012-01-08 13:41:25

标签: ajax internet-explorer asp-classic

经过本论坛成员的几条有用建议后,我越来越接近解决应该是一个简单的问题了。我是AJAX的新手。

有人可以告诉我为什么这段代码在Firefox 8中正常工作但在IE 9中没有?除非我关闭浏览器并重新打开,否则它会在IE中运行ONCE但不会再次运行!! ??

<script language="javascript" type="text/javascript">
<!--
    //Browser Support Code
    function ajaxFunction(){
        var ajaxRequest;
        try {
            // Opera 8.0+, Firefox, Safari
            ajaxRequest = new XMLHttpRequest();
        } 
        catch(e) {
            // Internet Explorer Browsers
            try {
                ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
            } 
            catch(e) {
                try {
                    ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
                }
                catch (e){
                    // Something went wrong
                    alert("Your browser broke!");
                    return false;
                }
            }
        }

        // Create a function that will receive data sent from the server
        ajaxRequest.onreadystatechange = function(){
            if (ajaxRequest.readyState == 4) {
            }
        }

        ajaxRequest.open("GET", "disp_processTEXT.asp", false);
        ajaxRequest.send(null);
    }
//-->
</script>

readystate留空,因为它是最初为div赋值的复制代码,但我只想在asp页面中运行数据库代码。据推测,这可能已被删除?

要在asp页面中运行的代码是

<%
    Set MyConn = Server.CreateObject("ADODB.Connection")
    MyConn.Open "dsn=xxx;uid=xxx;password=xxx;"
        SQLString = "UPDATE dbo_tbl_printing_tempstore SET front_has_text1 = 'YES', front_text = 'help' WHERE id = 106567"
        MyConn.Execute(SQLString)
    MyConn.Close
    Set MyConn = Nothing
%>

请帮助我,因为这让我很生气。

非常感谢

2 个答案:

答案 0 :(得分:2)

切换到jQuery及其Ajax系统,因为它应该可以跨框浏览器兼容,并为您节省大量时间:

添加jQuery的参考:

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>

并切换到Ajax method(位于上方):

<script type="text/javascript">
    $(document).ready(function() {
        $.ajax({
          url: 'disp_processTEXT.asp',
          success: function(response) {
            alert('It worked');
          }
        });
    });
</script>

更新

要使用jQuery绑定到onblur事件,请尝试此操作。从当前代码中删除onblur =属性。

$(document).ready(function() {
    $('#yourinput').on('blur', function(){        
        $.ajax({
          url: 'disp_processTEXT.asp',
          success: function(response) {
            alert('It worked');
          }
        });
    });
});

演示:http://jsfiddle.net/qmPLj/

答案 1 :(得分:0)

试试这个。它适用于所有浏览器,但有些Opera版本。

function GetXmlHttpObject(handler)
{
     var objXmlHttp=null;
     if(navigator.userAgent.indexOf("MSIE")>=0)
     {
          var strName="Msxml2.XMLHTTP";
          if(navigator.appVersion.indexOf("MSIE 5.5")>=0)
          {
               strName="Microsoft.XMLHTTP";
          }
          try
          {
               objXmlHttp=new ActiveXObject(strName);
               objXmlHttp.onreadystatechange=handler;
               return objXmlHttp;
          }
          catch(e)
          {
               alert("Error. Scripting for ActiveX might be disabled");
               return;
          }
     }
     else //All other browsers
     {
          objXmlHttp=new XMLHttpRequest();
          objXmlHttp.onload=handler;
          objXmlHttp.onerror=handler;
          return objXmlHttp;
     }
}

var url= "http://www.example.com/";
xmlHttp=GetXmlHttpObject(stateChanged);
xmlHttp.open("GET", url , true);
xmlHttp.send(null);