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

php–jqueryajax调用不是异步的

我对jQuery实现它的AJAX方法很新鲜.我有一个简单的设置,访问两个不同的页面,一个需要10秒钟完成(我有一个计时器设置)和一个检查第一页的状态.这两个函数是pr

我对jQuery实现它的AJAX方法很新鲜.

我有一个简单的设置,访问两个不同的页面,一个需要10秒钟完成(我有一个计时器设置)和一个检查第一页的状态.

这两个函数是progressCheck(),它每秒以最新状态请求其页面,而beginLogin()需要10秒才能加载.我在服务器上的用户对象中设置了一个值,两个页面都通过symfony 1.4访问.

问题是progressCheck()正常工作,直到我单击beginLogin(),然后在beginLogin()完成之前不会进行任何更改.我有两个函数设置为异步运行.我知道这一定很简单,但是我很茫然.

我在运行此页面时运行了Firebug-Net,结果是:

在10秒呼叫的等待期间调用了许多progressCheck(),但Net表示它们在没有任何等待时间的情况下运行了大约200毫秒.

有任何想法吗?

代码如下:












UPDATE
以下是两个PHP函数,它们返回两个页面调用的数据

define('DEBUG', true);
public function executeCheckLoginProgress(sfWebRequest $request)
{
if($this->getUser()->hasAttribute('login_script', 'sfGuardSecurityUser'))
$this->login_progress = $this->getUser()->getAttribute('login_script', -1, 'sfGuardSecurityUser');
else
$this->login_progress = '[undefined]';
$cOnn= $this->connectTestDb();
$query = sprintf("SELECT * FROM company_type WHERE id = 1;");
$result = mysql_query($query, $conn);
$this->login_progress = mysql_result($result, 0, 'name');
if($request->isXmlHttpRequest())
{ // this is an ajax all, only return value
$this->getResponse()->setHttpHeader("Content-type", "text/plain");
$this->getResponse()->setContent($this->login_progress);
return sfView::NONE;
}
}
public function executeLoginScript(sfWebRequest $request)
{
$user = $this->getUser();
if(!$user->hasAttribute('login_script', 'sfGuardSecurityUser'))
$user->setAttribute('login_script', 0, 'sfGuardSecurityUser');
$this->login_value = $user->getAttribute('login_script', 0, 'sfGuardSecurityUser');
$cOnn= $this->connectTestDb();
$query = sprintf("SELECT * FROM company_type WHERE id = 1;");
$result = mysql_query($query, $conn);
$this->login_value = mysql_result($result, 0, 'name');
$result = $user->assignAccessLevelIds();
if($result === true)
{
$this->login_value += 5;
$user->setAttribute('login_script', $this->login_value, 'sfGuardSecurityUser');
$query = sprintf("UPDATE company_type SET `name` = '%s' WHERE id = 1;", mysql_real_escape_string($this->login_value));
$result = mysql_query($query, $conn);
$this->login_progress = mysql_result($result, 0, 'name');
}
else
{
DataMan::logRawMessage('Unable to set access level user ['.$user->getAttribute('user_id', null, 'sfGuardSecurityUser'), sfLogger::WARNING);
}
// just for testing sleep!
if(DEBUG === true)
sleep(5);
$result = $user->assignCompanyIds();
if($result === true)
{
$this->login_value += 5;
$user->setAttribute('login_script', $this->login_value, 'sfGuardSecurityUser');
$query = sprintf("UPDATE company_type SET `name` = '%s' WHERE id = 1;", mysql_real_escape_string($this->login_value));
$result = mysql_query($query, $conn);
$this->login_progress = mysql_result($result, 0, 'name');
}
else
{
DataMan::logRawMessage('Unable to set company ids user ['.$user->getAttribute('user_id', null, 'sfGuardSecurityUser').'] '.__LINE__, sfLogger::WARNING);
}
// just for testing sleep!
if(DEBUG === true)
sleep(5);
}

解决方法:

我发现了Javascript调用挂起的原因.

为了防止用户会话数据发生race condition,PHP会锁定数据,直到出现两种情况之一.

>之前调用的PHP脚本调用session_write_close().
>先前调用的PHP脚本完成处理并隐式调用session_write_close().

遵循不调用session_start()的服务器调用应允许真正的异步调用的逻辑,我创建了一个虚拟PHP页面,它只是吐出一个简单的字符串,并在10秒脚本运行时每隔一秒调用该页面.它跑得很好.

解决方案来自阅读symfony论坛上的this discussion.


推荐阅读
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 深入理解CSS中的margin属性及其应用场景
    本文主要介绍了CSS中的margin属性及其应用场景,包括垂直外边距合并、padding的使用时机、行内替换元素与费替换元素的区别、margin的基线、盒子的物理大小、显示大小、逻辑大小等知识点。通过深入理解这些概念,读者可以更好地掌握margin的用法和原理。同时,文中提供了一些相关的文档和规范供读者参考。 ... [详细]
  • JS实现一键分享功能
    本文介绍了如何使用JS实现一键分享功能,并提供了2019独角兽企业招聘Python工程师的标准。同时,给出了分享到QQ空间、新浪微博和人人网的链接。 ... [详细]
  • 本文介绍了Java后台Jsonp处理方法及其应用场景。首先解释了Jsonp是一个非官方的协议,它允许在服务器端通过Script tags返回至客户端,并通过javascript callback的形式实现跨域访问。然后介绍了JSON系统开发方法,它是一种面向数据结构的分析和设计方法,以活动为中心,将一连串的活动顺序组合成一个完整的工作进程。接着给出了一个客户端示例代码,使用了jQuery的ajax方法请求一个Jsonp数据。 ... [详细]
  • C#多线程解决界面卡死问题的完美解决方案
    当界面需要在程序运行中不断更新数据时,使用多线程可以解决界面卡死的问题。一个主线程创建界面,使用一个子线程执行程序并更新主界面,可以避免卡死现象。本文分享了一个例子,供大家参考。 ... [详细]
  • Apache Shiro 身份验证绕过漏洞 (CVE202011989) 详细解析及防范措施
    本文详细解析了Apache Shiro 身份验证绕过漏洞 (CVE202011989) 的原理和影响,并提供了相应的防范措施。Apache Shiro 是一个强大且易用的Java安全框架,常用于执行身份验证、授权、密码和会话管理。在Apache Shiro 1.5.3之前的版本中,与Spring控制器一起使用时,存在特制请求可能导致身份验证绕过的漏洞。本文还介绍了该漏洞的具体细节,并给出了防范该漏洞的建议措施。 ... [详细]
  • 本文介绍了DataTables插件的官方网站以及其基本特点和使用方法,包括分页处理、数据过滤、数据排序、数据类型检测、列宽度自动适应、CSS定制样式、隐藏列等功能。同时还介绍了其易用性、可扩展性和灵活性,以及国际化和动态创建表格的功能。此外,还提供了参数初始化和延迟加载的示例代码。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • JavaScript和HTML之间的交互是经由过程事宜完成的。事宜:文档或浏览器窗口中发作的一些特定的交互霎时。能够运用侦听器(或处置惩罚递次来预订事宜),以便事宜发作时实行相应的 ... [详细]
  • ①页面初始化----------收到客户端的请求,产生相应页面的Page对象,通过Page_Init事件进行page对象及其控件的初始化.②加载视图状态-------ViewSta ... [详细]
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社区 版权所有