2014-07-14 27 views
1

請問有人能讓我對這個問題有所瞭解嗎?當我使用php json_encode響應ajax請求時,我無法做到的事情

我發送一個ajax請求到一個php文件。 一切正常,直到我將dataType從'html'更改爲'json'。

在嘗試調試, 我開始把這些3行代碼的某些點後的PHP文件:

header('Content-type: application/json'); 
echo json_encode(Array('message' => 'success')); 
die(); 

這是我發現:

  1. 我可以使用require_once來要求類,但我只能使用include:在第一種情況下,ajax給我錯誤,第二種情況下,它給了我'成功'的消息,因爲它應該。

  2. 我不能在php文件中使用全局變量,只能使用默認變量。

  3. 我不能使用以前包含的類的靜態方法,如MyClass :: myStaticMethod(),只有實例。

  4. 也許其他的事情我還沒有發現......

這是正常的還是我做錯了什麼? 我在哪裏可以找到我不能使用的php功能列表? 有沒有辦法解決這個問題,因爲我需要這些功能?

+1

究竟是什麼錯誤你在三個案件中的每一個得到? – mb21

+0

您發現的內容不正確。在輸出任何內容之前,你可以做任何你想做的事情,只要這不會破壞你想要達到的格式。只有在最終輸出生成自己的內容或者打破最終輸出(例如,由於致命錯誤/未捕獲的異常而中止腳本執行)之前你做的任何事情都會發生。 – Yoshi

+0

我完全不在路上。 – user2861867

回答

1

在服務器端,只要遵守JSON規則,就可以做任何你想做的事情。
作爲一種方法,您可以開始構建一個可以工作的靜態JSON文件。然後一塊一塊地用PHP生成的等價物替換它的部分,這意味着(並且僅限於),頭文件和內容

在瀏覽器端,您需要的是預定義格式(PHP腳本的輸出),沒有辦法知道是否使用了required_once或全局變量。

0

看看

<?php 
     //1st Situation 

      header('Content-type: application/json'); 
      echo json_encode(Array('message' => 'success')); 

    ?> 
     //respective JS would be 
    <script> 
       var json = ajax_response; 

    </script> 


    <?php 
     //2nd Situation with no content header (html default) 
      echo json_encode(Array('message' => 'success')); 

    ?> 
    //respective JS would be 


    <script> 
       var json =$.parseJSON(ajax_response); 

    </script> 
0

你只需要在服務器端做的是使用json_encode功能和輸出它來設置內容類型爲application/JSON,編碼數據。

<?php 
header('content-type: application/json; charset=utf-8'); 

$data = array(1, 2, 3, 4, 5, 6, 7, 8, 9); 

echo json_encode($data); 

?> 

您可以通過運行該行對其進行測試,例如在控制檯:

$.ajax({url: 'data.php'}) 
// Response: [1,2,3,4,5,6,7,8,9] 

讓我知道如果妳發現困難。

謝謝