2013-06-28 73 views
0

我使用$ .ajax從php腳本中獲取JSON響應。如果我從$ .ajax成功函數中記錄數據變量,它會輸出格式正確的JSON對象,但是當我嘗試訪問數據變量的屬性時,它是未定義的。這裏是PHP的被送回:jQuery響應從jQuery.ajax中的PHP響應呼叫

echo json_encode(array("status"=>true, "success"=>"Login Success", "message"=>"You have been logged in successfully.")); 

,這裏是我的Ajax調用:

$.ajax({ 
     type: "POST", 
     data: { 
      login: true, 
      username: $('#login-username').val(), 
      password: $('#login-password').val() 
     }, 
     async: false, 
     url: "./php/client-login.php", 
     success: function (data) { 
      console.log(data.status); 
      if (data.status) { 
       console.log(data.success); 
       displayModal(data.success, data.message, "./js/login-modal-code.js"); 
      } else if (!data.status) { 

       displayModal(data.error, data.message, "./js/login-modal-code.js"); 
      } 
     }, 
     error: function (jqXHR, status, responseText) { 
      console.log(status); 
     } 
}); 

,如果我加入dataType: "json"選項到$就呼叫我得到一個語法錯誤,並且如果我嘗試執行$.parseJSON(data);來訪問我獲得的數據中的數據以及意外的令牌錯誤。我不確定我做錯了什麼,我之前使用過這個設置,它之前一直有效,但由於某種原因,它現在不是。有人看到我出錯了嗎?

編輯:忘了這裏提到的是來自PHP腳本的響應:

{"status":true,"success":"Login Success","message":"You have been logged in successfully."}

編輯2:這裏是我的控制檯的屏幕。頂部的.length調用是從console.log(data)記錄的json,最底部的是來自chrome dev工具網絡選項卡中的響應,以便從php腳本響應。他們排隊完美,但第二個顯示長度爲93,我該如何解決這個問題? Console Image

+0

在猜測我會說你的PHP腳本包括意想不到的東西輸出,就像一個空行。 – 2013-06-28 00:35:21

+0

空格不應該導致解析JSON時出現問題,但我懷疑其他某個角色正在滑過,而您沒有看到它。 – Barmar

+0

也許在PHP文件中有一個BOM。 – Barmar

回答

0

所以我想出了一個解決這個問題的辦法,首先我對數據進行了JSON.stringify,然後是JSON.parse,最後是$ .parseJSON()來獲得一個javascript對象。不知道爲什麼有2個隱形字符在它離開PHP腳本之間添加並達到$ .ajax調用,所以如果有人知道爲什麼讓我知道

0

我在jQuery Docs上閱讀,發現「dataType:jsonp」不適用於同步請求,而您正在提出這種請求,因爲您有async: false。打開它可能會解決您的問題。

另外,看看文檔。

祝你好運!

+1

他使用JSON,而不是JSONP。 – Barmar