2011-08-15 38 views
1

我已經研究和發揮了一點點,但我很難過。本質上,我想設置我的網站,以便它可以檢測用戶是否「登錄」,從而改變它的外觀:刪除「登錄」鏈接並用「註銷」鏈接替換它,等等。

出於測試目的,我開始了我的index.html頁面:

<?php 
session_start(); 
$_SESSION["username"]="javaman"; 
?> 

接下來,我把我的設置功能從jQuery的document.ready內:

$(document).ready(function() { 
    setup_page(); 
}; 

的設置功能看起來像:

function setup_page() 
{ 
    var username = get_user(); 

    //check for error 
    var index = username.indexOf("error"); 

    //if not an error 
    if(username.length > 0 && index == -1) 
    { 
     //do the jquery calls to hide/show links 
    } 
} 

這GET_USER功能看起來像:

function get_user() 
{ 
    var result; 

    $.post("./session.php", {action : "get", key : "username", value : "val"}, function(data){ 
      result = data; 

     }); 

    return result; 
} 

的session.php文件是一個簡單的應用程序,需要在3個崗位價值,並希望吐出正確的結果,我遇到的問題是,JS的結果變量往往是不確定的,尤其是當我通過調試IE開發工具欄。 FF雖然看起來不錯。我是否以正確的方式使用回調?我已經嘗試將alert()函數放到任何地方以找出代碼在哪裏搞砸,但這並不能幫助提醒人們說,結果是未定義的。與此同時,get_user似乎調用post函數,但堆棧立即返回,並且直到get_user返回值undefined後才返回return語句。我相信我誤解了這裏的代碼流。我習慣了C,在邏輯上一個函數跟在另一個函數之後。在這種情況下,我正在解釋回調實質上是這樣的:

int i = callback_function(post(「some data」));

所以在我看來,帖子完成它的動作,然後調用另一個函數,或者至少執行另一個動作,然後完成,然後get_user可以返回它的值。

或者是操作順序:post,get_user,callback?

......在西雅圖

混淆
+0

我不會使用js al all,因爲它不安全,請使用php檢查會話,並適當地構建頁面。 – 2011-08-15 04:20:17

回答

0

的Internet Explorer本身並不支持indexOf陣列上。使用jQuery的$.inArray()代替:

var index = $.inArray("error", username); 
+0

啊,謝謝!有沒有指定IE做什麼和不支持的資源?或者,jQuery有關於使用什麼函數來支持儘可能多的瀏覽器的文檔? – Steve

+0

那裏有很多資源。現在想不出具體的事情。附:如果我的答案解決了您的問題,那麼接受它作爲正確的答案 - 通過點擊答案左側的複選標記 - 以便其他參與此帖的人知道這是正確的答案。 –

+0

@Steve indexOf函數是一個原生的javascript函數,與jquery無關。完全是愚蠢的IE故障。 –

0

請記住,AJAX代表異步 JavaScript和XML。所以一旦迴應來了,回調就會觸發,但剩下的執行就會繼續。如果您想鎖定執行,直到AJAX請求完成,請在AJAX調用之前使用

$.ajaxSetup({async:false}); 

+0

因此,只要我希望網站等到ajax完成,我需要使用ajaxSetup?如果我使用它,我必須$ .ajaxSetup({async:true});之後馬上? – Steve

+0

要麼是使用$ .ajax()和** async **選項。 – Hnatt

+0

儘管$ .post()是$ .ajax()的簡寫方法,因此您可以嘗試在'post'調用中添加'async:false'選項,它也可以工作。 – Hnatt