【问题标题】:AJAX code confusion using GET method使用 GET 方法的 AJAX 代码混淆
【发布时间】:2012-07-12 07:58:18
【问题描述】:

我买了一本书,开始学习如何使用 AJAX,有人给了我一个练习作业,我必须在一个 div 中输入值,然后向她给我的网站执行 AJAX 获取请求,以便在正确的 div 中接收信息.也许我在这本书之后错误地执行了 AJAX 获取请求。如果有人能指出我正确的方向,我将不胜感激。这不是为了学校,我没有网络脚本语言的经验,但愿意学习。看看我的javascript,也许你可以帮助我。我还不确定在收到信息后如何显示信息,但我确定我不想在点击提交按钮时加载另一个页面!

另外,大约 4 年以来,我有一种奇怪的方式来排列我的 C++ 编程代码。我已经随着时间的推移开发了它,如果很难理解,我很抱歉。如果是这样,那么我可以将其格式化并重新发布。另外,我正在尝试学习如何使用 AJAX GET 方法,而不是 POST 方法。我想以 JSON 格式返回信息。

<html>

    <head>

            <style type="text/css">
                    #header {
                            text-align: left;
                    }
                    #wrapper {

                            margin:bottom;
                            width:100%;

                    }

                    #sub-left {
                            float:left;
                width:225px;
            height:215px;
            border:1px solid black; 
            position: relative;
            text-align: left;
                    }
                    #sub-right {
            padding-left: 52px;
                            float:left;
            width:60%;
            height:45%;
            border:1px solid black; 
            position: relative;
            text-align: left;

                    }
        #sub-leftmost {

                            float:left;
            width:10%;
            height:100%;
            position: relative;
            text-align: left;
                    }

            </style>


    <script type=”text/javascript”>
    // function create GetXmlHttpObject
    function GetXmlHttpObject(){
    if (window.XMLHttpRequest){
    // code for IE7+, Firefox, Chrome, Opera, Safari
    return new XMLHttpRequest();
    }
    if (window.ActiveXObject){
    // code for IE6, IE5
    return new ActiveXObject(“Microsoft.XMLHTTP”);
    }
    return null;
    }

    function submitFormWithAjax(){
    var myAjaxGetrequest = new GetXmlHttpObject();

    var t2lName=document.testForm.namebox.value;
    var t2lEmail=document.testForm.ebox.value;
    var t2lAddress=document.testForm.addbox.value;
    var t2lPhone=document.testForm.phnbox.value;

    var parameters = "name=" + encodeURIComponent(t2lName) 
           + "&email=" +encodeURIComponent(t2lEmail)
           + "&address=" + encodeURIComponent(t2lAddress)
           + "&phone=" +encodeURIComponent(t2lPhone);

    myAjaxGetrequest.open("GET", "websitetosendandgetfrom.com" + parameters, true);
    myAjaxGetrequest.send( );

    if (myAjaxGetrequest.readyState==4){
    if(myAjaxGetrequest.status==200 || window.location.href.indexOf("http")==-1){
    document.getElementById("result").innerHTML=myAjaxGetrequest.responseText
    document.getElementById(“testForm”).style.display = “none”;
    }
    else    {
    document.getElementById(“testForm”).innerHTML=”An error has occured making the request”;
    }
    }
    }
    }   



</script>
    </head>

    <body>

<div id="wrapper">

    <div id="sub-leftmost">


    </div>
</div>


    <div id="wrapper">
    <div id="header"><h1>Quiz</h1></div>
    <div id="sub-left">
<form name = 'testForm'>
<FONT COLOR="CC3300",font size="5">&nbsp;&nbsp;&nbsp;<b>User Info</b></FONT>
<br />

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Full Name: <br /><center><input type="text"  size="25" id =         "namebox" /></center>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Email Address: <br /><center><input type="text"  size="25" id = "ebox" /></center>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Address: <br /><center><input type="text"  size="25" id = "addbox" /></center>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Phone Number: <br /><center><input type="text"  size="25" id = "phnbox" />
<a href=”#” onclick=”submitFormWithAjax();”>Finished!</a>
</form>

    </div>
    </div>
<div id="wrapper">
    <div id="sub-right">

    </div>
</div>


    </body>

    </html>

【问题讨论】:

  • 第二个函数 submitFormWithAjax 至少有一个问题。这是一个链接,其中包含修改后的格式和一些错误检查,通过警报让您知道 JavaScript 何时加载。 pastebin.com/X7ueZpnQ

标签: javascript html ajax windows web


【解决方案1】:

请求是异步的,只会在状态变化时调用回调函数。

基本上所有依赖于请求状态变化的代码都需要封装到AJAX请求的回调中:

myAjaxGetrequest.send();

myAjaxGetrequest.onreadystatechange = function() {
  if (myAjaxGetrequest.readyState==4){
    ...

【讨论】:

  • 我将该行添加到代码中,我仍然得到同样的结果。由于某种不存在的原因,它正在打开一个新页面。我只希望请求出现在右侧的 div 中。
  • 有谁知道我是如何从服务器接收回信息的?
  • 好的,我快到了。我的代码中有一个错误,阻止了其他一些事情的发生。现在,如果我能弄清楚如何将我的数据以 JSON 格式发送到 .com 服务器,那么我就能弄清楚如何检索它。这是我目前在 pastebin 上的代码,如果有人可以提供帮助,请发表评论。 pastebin.com/ctNDg9gv
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 2018-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-21
相关资源
最近更新 更多