2016-08-25 52 views
2

我很困惑。我發現了一些非常相似的問題,或者沒有回答,或者所有的答案都表示它應該起作用。或者說它工作。JQuery AJAX到PHP獲取undefined索引

我將一個關鍵值對對象從jquery傳遞給了php。並提醒它再次成功,但如果我去的PHP頁面。它說數據是空的或未定義的索引。下面

是我的jQuery

$('#test').click(function(){ 
    var obj= { 
     'key': 'value', 
    }; 
    $.ajax({ 
     url: "../folder/file.php", 
     type: "POST", 
     data: { 
      'obj' : obj 
     }, 
     dataType: "JSON", 
     success:function(data){ 
      alert(data); 
     } 

    }); 
}); 

下面是我的PHP

$data = $_POST['obj']; // this is line 1 
echo json_encode($data); // this is line 2 

與上面的代碼,當我點擊測試按鈕,我會得到警報value。但是如果我在測試按鈕綁定後進入php頁面。該網頁上說Notice: Undefined index: obj on line 1, and null on line 2.

如果我改變PHP的一面如下。我會得到there is nothing當我去到PHP頁面,但我原來的頁面提醒value

if(!empty($_POST['obj'])){ 
    $data = $_POST['obj']; 
    echo json_encode($data); 
}else{ 
    echo 'there is nothing'; 
} 

爲什麼?

我收到提醒我放入的值。所以它必須表示數據經過並返回。但PHP頁面說,否則

+1

變量不會在腳本的不同執行之間持續存在,會話變量除外。 – Barmar

+0

這意味着當我點擊我的測試按鈕時數據在那裏,但是當我加載php頁面時,它消失了? – codenoob

回答

3

當您發送AJAX HTTP是無狀態請求,它發送data:選項中的POST參數,並且腳本可以在$_POST中訪問它。

當您直接從瀏覽器訪問URL時,不會發送任何POST參數,因此$_POST爲空。

每次執行PHP腳本時,它都會啓動一個新的過程。不保留在前面的腳本中設置的變量。如果在腳本中使用了session_start(),則例外是$_SESSION

+0

好的,我的問題是一個大問題的子問題。我最初試圖傳遞帶有許多對象的對象。是可以通過jquery ajax。我看到jquery文檔說它只能做簡單的對象。 – codenoob

+1

是的,你可以。它將對對象進行URL編碼,PHP將自動對其進行解碼。 – Barmar

+0

如何在同一個Ajax請求期間打開我的php頁面。所以我可以實際var_dump我的新對象,並測試是否正在工作。 – codenoob

2

你是不是瞭解如何HTTP的工作,如果你想有一個值存儲,使用PHP session_start()和崗位價值存儲$_SESSION