2013-12-10 4 views
1

localhost에서 실행중인 HTML 페이지에서 ajax 호출을 통해 python 스크립트에서 json 응답을받습니다. 내가 경고/응답을 표시하면 적절한 아약스 형식이지만 나는 그것을 디코딩하는 방법을 모른다. JSON 구문 분석 디스플레이 [개체] [개체]. 어떤 도움이 필요합니까? 미리 감사드립니다.Ajax 호출에서 Json 응답 디코드

HTML :

function getData() { 
    // Code doesn't even enter this function but when i remove the $.ajax part it enters the function 
    alert("I AM HERE"); 

    $.ajax({ 
     type: "GET", 
     datatype: 'json', 
     url: "/cgi-bin/check.py", 
     data: { 
      action: 'muawia()', 
     }, 
     success: function(data) { 
      alert(data); 
     }, 
     error: function(data) { 
      alert(data.responseText); 
     } 
    }); 
}; 

파이썬 : 당신은 제대로 데이터의 형식을 $ .parseJSON을 사용할 수 있습니다

#!/usr/bin/python 

import cgi, cgitb 
from StringIO import StringIO 
import json 

class myclass: 
    def __init__(self): 
      self.data = [] 


    def muawia(self): 
     content=json.loads('{"access": {"token": {"issued_at": "2013-04-18T14:40:23.299903", "expires": "2013-04-19T14:40:23Z", "id": "4c5ef01f52c7404fb5324c520d25d1fe", "tenant": {"description": "admin tenant", "enabled": true, "id": "51ad87714b86442d9a74537d6f890060", "name": "admin"}}, "serviceCatalog": [{"endpoints": [{"adminURL": "http://10.199.0.250:8774/v2/51ad87714b86442d9a74537d6f890060", "region": "RegionOne", "internalURL": "http://10.199.0.250:8774/v2/51ad87714b86442d9a74537d6f890060", "id": "9869f55f0de2490685676b6ec27f6097", "publicURL": "http://10.199.0.250:8774/v2/51ad87714b86442d9a74537d6f890060"}], "endpoints_links": [], "type": "compute", "name": "nova"}, {"endpoints": [{"adminURL": "http://10.199.0.250:8080", "region": "RegionOne", "internalURL": "http://10.199.0.250:8080", "id": "321601d827ba4bbbb6de1df69fd43a1c", "publicURL": "http://10.199.0.250:8080"}], "endpoints_links": [], "type": "s3", "name": "swift_s3"}, {"endpoints": [{"adminURL": "http://10.199.0.250:9292", "region": "RegionOne", "internalURL": "http://10.199.0.250:9292", "id": "cca7d7a24dbe45b6ae08da2c023b0d82", "publicURL": "http://10.199.0.250:9292"}], "endpoints_links": [], "type": "image", "name": "glance"}, {"endpoints": [{"adminURL": "http://10.199.0.250:8776/v1/51ad87714b86442d9a74537d6f890060", "region": "RegionOne", "internalURL": "http://10.199.0.250:8776/v1/51ad87714b86442d9a74537d6f890060", "id": "14773153229d4e7f80e47cf7b1dd2d15", "publicURL": "http://10.199.0.250:8776/v1/51ad87714b86442d9a74537d6f890060"}], "endpoints_links": [], "type": "volume", "name": "cinder"}, {"endpoints": [{"adminURL": "http://10.199.0.250:8773/services/Admin", "region": "RegionOne", "internalURL": "http://10.199.0.250:8773/services/Cloud", "id": "064df72a67f54dffa68c07b8fc400bdb", "publicURL": "http://10.199.0.250:8773/services/Cloud"}], "endpoints_links": [], "type": "ec2", "name": "nova_ec2"}, {"endpoints": [{"adminURL": "http://10.199.0.250:8080/", "region": "RegionOne", "internalURL": "http://10.199.0.250:8080/v1/AUTH_51ad87714b86442d9a74537d6f890060", "id": "194df182a8c043e48175a40fb615064e", "publicURL": "http://10.199.0.250:8080/v1/AUTH_51ad87714b86442d9a74537d6f890060"}], "endpoints_links": [], "type": "object-store", "name": "swift"}, {"endpoints": [{"adminURL": "http://10.199.0.250:35357/v2.0", "region": "RegionOne", "internalURL": "http://10.199.0.250:5000/v2.0", "id": "34db74b5f32f4121932725b1146a1701", "publicURL": "http://10.199.0.250:5000/v2.0"}], "endpoints_links": [], "type": "identity", "name": "keystone"}], "user": {"username": "admin", "roles_links": [], "id": "b5902682120742baa150945d8a37ff47", "roles": [{"name": "admin"}], "name": "admin"}, "metadata": {"is_admin": 0, "roles": ["9aa2eb385f4e4a8e80ad5002c212e76b"]}}}') 
     data=json.dumps(content, indent=4, separators = (', ', ': ')) 
     print data 
     return 

print "Content-Type: text/html\n" 
x = myclass() 
x.muawia() 
+0

"application/json"의 ** Content-Type **을 반환해야합니다. 또한 CGI를 사용하지 마십시오! 진짜 파이썬 웹 프레임 워크를 사용하십시오. –

+1

stringify를 사용해 보셨습니까? http://stackoverflow.com/questions/4810841/json-pretty-print-using-javascript –

+0

HTTP 헤더와 본문을 구분하기 위해 빈 줄을 인쇄해야합니다. – SuperSaiyan

답변

0

. 오류 응답 기능이 끝나면 여분의 쉼표를 제거 할 수도 있습니다. 구문 오류가 발생할 수 있습니다. "action : 'muawia()'에서 쉼표를 제거하십시오.

success: function(data){ 
    r = $.parseJSON(data) 
    alert(r.responseText); 
}, 
error: function(data){ 
    r = $.parseJSON(data) 
    alert(r.responseText); 
} 

희망이 있습니다.

0

이 정상적인 JavaScript 객체를 생성하므로 절대적으로 정상이므로 경고에 이 표시됩니다. 각 개체의 속성에 액세스하여 해당 값을 가져와야합니다. 귀하의 경우에는 var jsonObj = JSON.parse(data); alert(jsonObj.access.token.issued_at);

는 예를 들어있을 것 "2013-04-18T14 : 40 : 23.299903"

2

당신은

console.log(data) 

오히려 경고 이상 (데이터)를 사용해야합니다. 경고는 문자열 만 표시합니다.

1

경고()는 문자열을 출력합니다. JSON.parse에서 반환되는 실제 객체를 표시하는 JSON.parse와 함께

data = data.toString(); 
alert(data); 

사용 CONSOLE.LOG 또는 console.dir : 그래서 일반적으로는 같은 것이다.

// In your $.ajax success method 
var someVar = JSON.parse(data); 
console.log(someVar); 

Firebug/Chrome DevTools 콘솔에서 이름을 입력하여 일시적으로 전역 변수로 디버깅하도록 설정할 수도 있습니다. 예 :

// In your $.ajax success method 
window.data = data; 

그런 다음 콘솔에 "data"를 입력하십시오.

이 프로덕션 환경에 제공하는 것은 좋지 않지만 브라우저 엔진 JavaScript 변수, 특히 글로벌 변수 이름으로 전역 변수를 수집 할 수는 없으므로 데이터는 다른 전역 변수와 충돌 할 가능성이 높습니다. 어떤 이유로 글로벌을 계속 사용하려면 오류 방지를 위해 단단한 이름 지정 규칙을 사용하십시오.