2011-03-28 154 views
0

嘿所有..在荷兰有GJ的问题。ajax身份验证

我很忙,我的第一个AJAX网络编程,真的很喜欢这里一个PHP文件(索引)加载的想法,从那里xmlhttprequest能够加载和刷新div的内容,而无需刷新页面。

事情到目前为止运行良好,大约4个div部分根据您按哪个menubutton(全部通过getdata函数和xmlhttprequests)获取不同的内容。

我最后一步是整合一个额外的autenthication div。我想实现一个很好的jquery淡入淡出系统与login.php与用户名和传递的输入字段;一个process_login.php,它将数据与mysql进行比较,如果匹配或不匹配则返回;最后是一个安全的页面,用户在成功授权后可以注销。 当我直接在浏览器中加载login.php时,这些页面似乎毫无用处地工作。

当我在login.php上使用getdata和xmlhttprequest将它加载到index.html的div部分时,没有任何工作,因为它似乎无法再使用login.php页面上声明的函数

阅读阿贾克斯假人不给我任何答案,虽然我确定必须有一个容易理解的逻辑解释这个事实。

我不能让我的头周围it..please任何信息,欢迎...迎接

GJ

回答

0

至于为什么.....我不知道为什么这样的行为如此。

但是至于修复/解决方法。我在目前类似的情况下在页面加载(实际上是asp/jscript而不是php)。发现的是,您在加载的页面中编写的脚本在通过AJAX加载时不再可用。如果正在加载的页面包含applet或其他html对象类型的标记,我遇到了同样的问题。

对此的解决方案是将脚本移动到服务器上的外部文件,从那里你的页面将能够达到他们无论它是由AJAX加载为面板是一个独立的页面

例子:(这显然是JScript中,而不是PHP,但加载将是相似的) 页的login.asp包含<head>

<script type="text/javascript" src="scripts.js"></script> 
1

的JavaScript通过Ajax加载不会成为窗口的一部分。您必须明确执行它(例如使用eval)。这个问题没有直接的解决方案,因此您需要为应用程序提供一个模型,以了解通过ajax加载的某些资源所需的资源。

做到这一点的最好方法是创建一些应用程序范围的约定 - 例如,设置页面&脚本文件的交叉引用,并使用$.getScript按需加载它们。理想情况下,您会在尝试重新加载之前检查资源是否已经加载。

这里有一个简单的想法,你可以使用。在您的login.php的输出中,在顶部添加一个标签,例如

<span id="script" style="display:none">login,/scripts/login.js</span>

然后Ajax调用加载一个页面,这样做后:

data = $('#wrapper').find('#script').html().split(','); 
if (!window[data[0]]) { 
    $.getScript(data[1]); 
} 

所以基本上你传递一些信息,该装载机使用找出HTML是什么它需要。第一个参数是一个命名空间,所以你可以检查它是否已经加载。第二个是脚本的路径。

你可以充实这个来解释多个脚本,使用JSON作为数据格式等等,但这是一个基本的想法。

是的,你总是可以包括所有你的脚本,但是按需加载对于任何非平凡的应用程序来说都是一个好主意,所以你不需要使用不需要的脚本来混淆事物。毕竟每个会话只需要登录脚本一次。