2015-05-23 128 views
1

我从我的PHP JSON数据以这种形式:jQuery的JSON返回undefined

string(170) "[{"id":"3","Name":"Kontrahent#322","NIP":"753","Adress":"Wiosenna29","PostCode":"20-201","City":"Olkusz","Phone":"12312312","Email":"[email protected]","Value":"0"}]" 

和我的功能:

function showUser(str) { 
    if (str == "") { 
     document.getElementById("txtHint").innerHTML = ""; 
     return; 
    } else { 
     var val = $('#test').val()  
     var id = $('#clientsname option').filter(function() { 
      return this.value == val; 
     }).data('id'); 
     if (window.XMLHttpRequest) { 
      xmlhttp = new XMLHttpRequest(); 
     } else { 
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
     } 
     xmlhttp.onreadystatechange = function() { 
      if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
       document.getElementById("txtHint").innerHTML = xmlhttp.responseText; 
       var data = xmlhttp.responseText; 
       alert(data[0].Name); 

      } 
     } 
     xmlhttp.open("GET","getclients/"+id); 
     xmlhttp.send(); 
    } 
} 

警报(数据[0],请将.Name);或alert(data.Name);返回undefined。 console.log(data); 返回:

string(141) "[{"id":"1","Name":"Kontrahent #1","NIP":"735256985","Adress":"","PostCode":"","City":"","Phone":"777555888","Email":"[email protected]","Value":"0"}]" 

我不知道什么是错我的脚本。任何人都可以陪我?

+0

可以包含PHP的输出你的JSON的片段? – diggersworld

+0

console.log(data);回报? – codegaze

+1

你的PHP JSON似乎无效。 – vinayakj

回答

2

您需要解析响应,JSON与JSON.parse方法,因为xmlhttp.responseText只是一个字符串:

xmlhttp.onreadystatechange = function() { 
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
     document.getElementById("txtHint").innerHTML = xmlhttp.responseText; 
     var data = JSON.parse(xmlhttp.responseText); 
     alert(data[0].Name); 
    } 
} 

演示:http://plnkr.co/edit/LygRQEu89LnQXW6TWDMa?p=preview

+0

未捕获的SyntaxError:意外的令牌s任何时候都是意外的令牌a或s,并且我确信没有这样的字符。 – Kubol

+0

多数民众赞成在字符串(170)..从你的JSON ..哟需要有效的JSON字符串返回 – vinayakj

+0

@Kubol请确保您输出有效的JSON字符串。在单独的选项卡中打开'getclients/3'并检查输出是否为[{“id”:“3”,“Name”:“Kontrahent#322”,“NIP”:“753”,“Adress”:“Wiosenna29” “邮编”: “20-201”, “城市”: “奥尔库什”, “电话”: “12312312”, “电子邮件”: “[email protected]”, “值”: “0”}]'。 – dfsq

2

xmlhttp.responseText返回文本。如果您想分析JSON,请使用JSON.parse(xmlhttp.responseText)。因此

xmlhttp.onreadystatechange = function() { 
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
     document.getElementById("txtHint").innerHTML = xmlhttp.responseText; 

     // var data = xmlhttp.responseText; 
     var data = JSON.parse(xmlhttp.responseText); 
     alert(data[0].Name); 
    } 
} 

Uncaught SyntaxError: Unexpected token s

接着,

string(170) "[{"id":"3","Name":"Kontrahent#322","NIP":"753","Adress":"Wiosenna29","PostCode":"20-201","City":"Olkusz","Phone":"12312312","Email":"[email protected]","Value":"0"}]"

不是JSON。这看起来像来自PHP的print_r。如果您有一个有效的JSON字符串,请使用echo,例如在PHP中使用json_encode()。有效的JSON将如下所示:

[{"id":"3","Name":"Kontrahent#322","NIP":"753","Adress":"Wiosenna29","PostCode":"20-201","City":"Olkusz","Phone":"12312312","Email":"[email protected]","Value":"0"}] 
+0

我有”返回json_encode($ data-> result());“ – Kubol

+0

看起来不错,但你不是指'echo json_encode($ data-> result());'?如果这是函数的返回值,请确保稍后它是echo'd,而不是print_r'd – Drakes

+0

如果您接受了其他答案,您是如何更改PHP的? – Drakes

1

您的json数据不正确。

$result = array("id"=>"3","Name"=>"Kontrahent#322","NIP"=>"753","Adress"=>"Wiosenna29","PostCode"=>"20-201","City"=>"Olkusz","Phone"=>"12312312","Email"=>"[email protected]","Value"=>"0"); 

return json_encode($result); 

检索JSON.parse方法JSON数据

xmlhttp.onreadystatechange = function() { 
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
     document.getElementById("txtHint").innerHTML = xmlhttp.responseText; 
     var data = JSON.parse(xmlhttp.responseText); 
     alert(data[0].Name); 
    } 
} 
+0

这是对的,欢迎来到10分钟前:) – Drakes