2013-06-28 66 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