热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

单个页面中有两个xmlHttpRequests-TwoxmlHttpRequestsinasinglepage

Imfairlynewtoajaxbutamtryingtoimplementtwosimplecallstodynamicallychangestwosepara

I'm fairly new to ajax but am trying to implement two simple calls to dynamically changes two separate divs on a page using Javascript. I have no problems using one call at a time, but when I use two it seems like the second xmlhttprequest takes over the first and writes into both divs.

我是ajax的新手,但我正在尝试实现两个简单的调用,使用Javascript动态更改页面上的两个单独的div。我一次使用一个调用没有问题,但是当我使用两个调用时,似乎第二个xmlhttprequest接管了第一个调用并写入两个div。

I've read and tried using the fixes listed on these two other posts both neither seem to work in my case:

我已阅读并尝试使用这两个其他帖子中列出的修复程序,这两个似乎都不适用于我的情况:

Sending two Ajax requests to two different PHP scripts from single Javascript function

从单个Javascript函数向两个不同的PHP脚本发送两个Ajax请求

Using two xmlhttprequest calls on a page

在页面上使用两个xmlhttprequest调用

And here is my relevant code:

这是我的相关代码:

function request_handler(url, params, changed_div) {
    if(window.XMLHttpRequest) {
            try {
                    req = new XMLHttpRequest();
            }catch(e) {
                    req = false;
            }
    }else if(window.ActiveXObject) {
            try {
                    req = new ActiveXObject("Msxml2.XMLHTTP");
            }catch(e) {
                    try {
                            req = new ActiveXObject("Microsoft.XMLHTTP");
                    }catch(e){
                            req = false;
                    }
            }
    }

    if(req) {
              req.Onreadystatechange= function(){
                    if (req.readyState == 4 && req.status == 200){
                                    document.getElementById(changed_div).innerHTML = req.responseText);

                    }
            }

            req.open("POST", url, true);
            req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
            req.send(params)
            return true;
    }

    return false;
}

Here is the basic format of each request using the function above:

以下是使用上述函数的每个请求的基本格式:

request_handler("sample.php", parameters , "sample_div");

Apologies if I'm passing something simple up here, I just can't seem to get it to work.

抱歉,如果我在这里简单地传递一些东西,我似乎无法让它发挥作用。

3 个解决方案

#1


3  

This question

Using two xmlhttprequest calls on a page

在页面上使用两个xmlhttprequest调用

does answer your question.

确实回答了你的问题。

In your request_handler function, you're using a global variable req that gets overwritten every time you call that function.

在request_handler函数中,您使用的是全局变量req,每次调用该函数时都会被覆盖。

If you change it to start:

如果您将其更改为开始:

function request_handler(url, params, changed_div) {
    var req;
    // Rest of your function
}

you should find that it works. In this case req has a local scope and so is not overwritten when you call request_handler for the second time.

你应该发现它有效。在这种情况下,req具有本地范围,因此在第二次调用request_handler时不会被覆盖。

Can I also suggest that you strongly consider using the likes of jQuery, Prototype or Dojo, if you're planning on writing Ajax scripts? Writing scripts that work cross-browsers is hard to do well and these frameworks do a lot of the legwork for you.

如果你打算编写Ajax脚本,我还可以建议你强烈考虑使用jQuery,Prototype或Dojo之类的东西吗?编写跨浏览器的脚本很难做得很好,这些框架为你做了大量的工作。

#2


2  

Your req is a global variable as it is defined without the var keyword, keep that in mind.

您的req是一个全局变量,因为它是在没有var关键字的情况下定义的,请记住这一点。

What I think happens is that the second call overwrites the first one. This is because of the (default) asynchronous nature of the XMLHTTPRequest. Your first function call will end, but the fetching of the page is still going. The second function call then overwrites the previous request.

我认为发生的是第二次调用覆盖了第一次调用。这是因为XMLHTTPRequest的(默认)异步特性。您的第一个函数调用将结束,但页面的获取仍在继续。然后第二个函数调用将覆盖先前的请求。

This however does not explain why both div get filled with the result of the second call. I must say I'm a bit lost on that one.

然而,这并不能解释为什么两个div都填充了第二个调用的结果。我必须说我在那个上有点失落。

#3


0  

This is a pretty common problem, especially if you don't want to take additional measures to block further calls until the first has finished loading. Its a bigger subject that I can cover in a post but there are several examples on the web of an "Ajax Queue" that effectively manages the order of requests received.

这是一个非常常见的问题,特别是如果您不希望采取其他措施来阻止进一步调用,直到第一次完成加载。它是一个更大的主题,我可以在一篇文章中介绍,但网上有几个例子,它们有效地管理收到的请求顺序的“Ajax队列”。

jQuery has a plugin for managing queues and I'm certain that most other Javascript frameworks such as Prototype and MooTools will as well. If you're wanting to stick with raw Javascript I would take a look at this web page:

jQuery有一个用于管理队列的插件,我确信大多数其他Javascript框架,如Prototype和MooTools也是如此。如果您想坚持使用原始Javascript,我会看一下这个网页:

http://www.cmarshall.net/MySoftware/ajax/index.html

He implements a queue very effectively and has an excellent example of its use.

他非常有效地实现了一个队列,并且有一个很好的使用示例。


推荐阅读
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 本文介绍了django中视图函数的使用方法,包括如何接收Web请求并返回Web响应,以及如何处理GET请求和POST请求。同时还介绍了urls.py和views.py文件的配置方式。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 如何在php中将mysql查询结果赋值给变量
    本文介绍了在php中将mysql查询结果赋值给变量的方法,包括从mysql表中查询count(学号)并赋值给一个变量,以及如何将sql中查询单条结果赋值给php页面的一个变量。同时还讨论了php调用mysql查询结果到变量的方法,并提供了示例代码。 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
author-avatar
进出口产地
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有