2014-05-16 6 views
1

내 JSONP 데이터를 변수에 저장하는 데 문제가 있습니다. Google 파이 차트의 입력으로 사용할 수 있도록 숫자를 변수에 저장해야합니다.JSONP를 변수에 저장하는 방법은 무엇입니까?

내 test.json :

{ 
"name": "ProjA", 
sp": 10, 
"current": 20 
} 

지금 내가 SP 값을 얻으려면 예를 들어.

나는 JQuery와 함께 노력했다 :

var sp = (function() { 
    var sp = null; 
    $.ajax({ 
     'async': false, 
     'global': false, 
     'url': test.json, 
     'dataType': "json", 
     'success': function (data) { 
      json = data.sp; 
     } 
    }); 
    return json; 
})(); 

가 지금은 변수 SP에 숫자 10을 얻고 싶었다. 그리고 나서 구글 차트에 sp를 넣으십시오 :

var data = new google.visualization.DataTable(); 
    data.addColumn('string', 'Topping'); 
    data.addColumn('number', 'Slices'); 
    data.addRows([ 
     ['Finished', sp, 
     ['In Progress', 1], 
     ['Canceled', 1], 
     ['Rejected', 2] 
    ]); 

이것은 단지 부품 코드 일 뿐이며, 수입품은 작동하지 않습니다. 변수의 저장에 문제가 있다고 생각합니다. 누군가 나를 도울 수 있습니까?

중요 : 웹 서버가 없습니다! 교차 도메인을 피하려면 JSONP를 사용해야합니다!

편집 : 콘솔 상태에서의 오류로,

function getData(callback) { 
$.ajax({ 
async: false, 
global: false, 
url: 'test.json', // make sure that you quote your filename 
dataType: 'jsonp', // this is meant to be jsonp, not json 
success: function (data) { 
    console.log(data); 
    callback(data.sp); 
} 


}); 
} 

그러나 크로스 도메인이 여전히 문제가 될 것 같습니다 : 나는 아래의 예를 시도

"XMLHttpRequest의 수 없어 로드가 유효하지 않습니다. 원본 'null'은 액세스가 허용되지 않습니다. jquery-1.11.1.min.js : 4 "

솔루션을 계속 검색 중입니다.

+2

json 데이터의 sp 앞에 큰 따옴표를 잊어 버렸습니다. – Mivaweb

+2

정상적인 기능과 동일한 방식으로 비동기 호출로 구성된 함수에서 데이터를 반환 할 수 없습니다. 'json' 변수는 발견하는 동안 비어 있습니다. 당신은 어떤 설명의 콜백을 사용해야합니다. – Andy

답변

0

비동기 호출을 사용 중이므로 정상적인 반환을 사용할 수 없습니다.

콜백이 예제는 jQuery를이 promise interface 사용한다는 사실을 이용

function getData(callback) { 
    return $.ajax({ 
    async: false, 
    global: false, 
    url: 'test.json', 
    dataType: 'jsonp' 
    }); 
} 

getData.then(function (data) { 
    var data = new google.visualization.DataTable(); 
    data.addColumn('string', 'Topping'); 
    data.addColumn('number', 'Slices'); 
    data.addRows([ 
    ['Finished', data.sp], 
    ['In Progress', 1], 
    ['Canceled', 1], 
    ['Rejected', 2] 
    ]); 
}); 

function getData(callback) { 
    $.ajax({ 
    async: false, 
    global: false, 
    url: 'test.json', // make sure that you quote your filename 
    dataType: 'jsonp', // this is meant to be jsonp, not json 
    success: function (data) { 
     callback(data.sp); 
    } 
    }); 
} 

getData(function (sp) { 
    var data = new google.visualization.DataTable(); 
    data.addColumn('string', 'Topping'); 
    data.addColumn('number', 'Slices'); 
    data.addRows([ 
    ['Finished', sp], // close your braces 
    ['In Progress', 1], 
    ['Canceled', 1], 
    ['Rejected', 2] 
    ]); 
}); 

약속 :이 작업을 수행 할 수있는 몇 가지 방법이 있습니다.

+0

예제를 시도했지만 작동하지 않았습니다. 차트 선언 전에 function call draw : 함수 drawChart {.... 그리고 var data = ... 등이 나온다. 그 importmant인가? jQueryy 1.11-1이 좋습니까? 아니면 더 나은 버전이 필요합니까? 나는 무엇이 잘못 될지 모른다. URL에서 "test.json"이라고 말하면됩니다. 내 파일이 같은 폴더에 있습니다. – user3533253

+0

@ user3533253, 질문을 업데이트하거나 JSfiddle에 코드를 추가 할 수 있다면 한 번 훑어 보겠다. 그러나 나는 어떤 약속도 할 수 없다. – Andy

+0

당신이 너무 좋고 내 피들을보고 나를 도우려고한다면, 이드는 정말로 감사합니다. http://jsfiddle.net/86aBp/ – user3533253

관련 문제