2010-03-13 3 views
2

로컬로 파일로 저장된 클라이언트 측 javascript 객체를 가져 오려고합니다. 이것이 가능한지 확실하지 않습니다.JSONP를 사용하여 클라이언트 측 JavaScript 객체를 다운로드하는 방법은 무엇입니까?

  1. 핑은 "나를 다운로드"가 결국 JSON 객체 객체와
  2. 작업 클라이언트 측을 다시 얻고, 위해 외부 API 링크
  3. 이를 :

    기본 구조는 이것이다 링크는 데이터를 처리하는 서버로 데이터를 보내고 mime 유형 application/json으로 다시 전송합니다. 사용자는 파일을 로컬로 다운로드하라는 프롬프트를 표시해야합니다.

오른쪽은 지금 여기 내 조각입니다 :

서버 측 코드

<?php 
$data = array('zero', 'one', 'two', 'testing the encoding'); 
$json = json_encode($data); 
//$json = json_encode($_GET['']); //eventually I'll encode their data, but I'm testing 
header("Content-type: application/json"); 
header('Content-Disposition: attachment; filename="backup.json"'); 
echo $_GET['callback'] . ' (' . $json . ');'; 
?> 

관련 클라이언트 측 코드 지금 나는 api.php 사이트를 방문 할 때

$("#download").click(function(){ 
    var json = JSON.stringify(collection); //serializes their object 
    $.ajax({ 
     type: "GET", 
     url: "http://www.myURL.com/api.php?callback=?", //this is the above script 
     dataType: "jsonp", 
     contentType: 'jsonp', 
     data: json, 
     success: function(data){ 
      console.log("Data Received: " + data[3]); 
     } 
    }); 
    return false; 
}); 

파이어 폭스, 그것은 download.json의 다운로드하라는 메시지를 표시하고 그 예상대로,이 텍스트 파일에 결과 :

(["zero","one","two","testing the encoding"]); 

을 내가 AJAX 호출을 실행하는 #download을 클릭하면, 거의 무엇 인 방화범

Data Received: testing the encoding 

에 로그인 나는 기대하고 싶다. JSON 문자열을 받고 serialize하는 중입니다.

실제 질문 내가 브라우저에서 페이지를 방문 할 때 내가 얻을 같은 프롬프트 - 투 - 다운로드 동작을 취득 할 필요가 무엇

  1. : 나는 두 가지를 누락
  2. (훨씬 간단합니다.) json 객체를 직렬화하기 위해 서버로 보내지는 서버 측에 어떻게 액세스합니까?

답변

2
  1. 당신은 일반적으로 window.location를 설정하여, 페이지를 방문하여 브라우저를 알려줄 필요가 나는 GET 배열에 어떤 인덱스 모른다 (내가 아는 바보,하지만 난 거의 다 해봤) .
  2. 문자열이기 때문에 원시 쿼리 문자열의 일부로 전송됩니다. 그것을 $_SERVER['QUERY_STRING']에서 찾으십시오.
관련 문제