2014-11-11 2 views
0

js에서 PHP로 일부 JSON 데이터를 보내려고하고 REST에 의해 몽고로 전달하려고합니다.json에서 jp로 json - 스트림을 열지 못했습니다 : HTTP 요청이 실패했습니다

다음은 json 문자열을 출력합니다 (PHP 파일에 문자열로 넣은 경우 나중에 작동합니다. 아래 스 니펫을 참조하십시오). iM.php에

var s = JSON.stringify(send); //s contains previous data in arrays, etc 

ic(s); 

function ic(s){ 
    var ajaxUrl = './iM.php'; 
    $.getJSON(ajaxUrl, 
    {da: s}, 
    function(data) { 
     console.log (data); 
}); 
} 

:

JS는 JSON을 보내 파이어 폭스 디버거에서

$s = $_GET["da"]; // <-- doesn't work 
//$s = '{"r":"pax","c":1,"w":["kiwi","melon"],"g":["cat","dog"]}'; //<-- works fine 
$opts = array(
    "http" => array(
     "method" => "POST", 
     "header" => "Content-type: application/json", 
     "content" => $s, 
    ), 
); 

$context = stream_context_create($opts); 

$result = file_get_contents("https://api.mongolab.com/api/1/databases/$db/collections/$collection?apiKey=$key", false, $context); 

var_dump($result); // Dumps the response document 

, 나는 그러나 어떤 데이터가 추가되지 않습니다, 실제로 파일이 호출되는 것을 볼 수 있습니다.

error_log 파일이 생성되었습니다. 스트림을 열지 못했습니다 : HTTP 요청이 실패했습니다! HTTP/1.1 400 나쁜 요청

나는 또한 작동하지 않는 PHP에서 urlencode ($ s)를 시도했다. $ db, $ collection 및 $ key는 PHP에서 defiend이며 아무런 문제가 없습니다.

무엇이 누락 되었습니까?

+1

시도를 json_decode를 사용/$ collection? apiKey = $ key' 그리고 체크는 url이 존재한다는 것입니다. – vaso123

+1

POST를 사용하여 JSON을'IM.php '로 보내보십시오. 어쩌면 GET 요청에 너무 커서 또는 잘못된 문자가 포함되어있을 수 있습니다. –

+0

@lolka_bolka url은 정확하고 PHP에서 // 주석을 제거하면 PHP가 요청을 올바르게 처리 할 수 ​​있습니다. –

답변

0

기본적으로 JSON.stringify (send) 함수는 json을 얻는 것과 같은 방식으로 디자인되었습니다.

JSON.stringify(value[, replacer[, space]]) 

이 기능을 올바르게 사용해야합니다. 더 많은 것을 알기 위해 문서를 읽으십시오. JS 배열 또는 JS 오브젝트 으로 입력 값을 가지고 있고 단일 문자열로 변환 할 수 있다면 기본적으로 유용합니다.

이미 문자열 형식 인 json을 문자열로 변환하려는 경우에만 '{/ "r /":/"pax /",/"c /": 1}

이러한 :

var s = ['1','2','3']; 
and 
var s = "['1','2','3']"; 

는 완전히 다른 것들입니다.

배열 또는 json 개체를 보내는 경우 위의 코드를 사용하여 직접 으로 보낼 수도 있습니다. 예를 들어 는 :

send = {"r":"pax","c":1,"w":["kiwi","melon"],"g":["cat","dog"]}; 
ic(send); 

function ic(s){ 
    var ajaxUrl = 'im.php'; 
    $.getJSON(ajaxUrl, 
    {da: s}, 
    function(data) { 
     console.log (data); 
}); 
} 

제대로 PHP 측에서 배열을 처리 할 수 ​​있는지 확인하십시오.

$s = $_GET["da"]; //this will be array. 
var jsonObject = json_encode($s); 

또는 당신이 그것을 캐릭터 라인 화하고 제공 할 수 있습니다 : 당신이 JSON을 반환하려는 경우처럼 는 않습니다.

또는 다른 단지 문자열을 보낸 다음 https://api.mongolab.com/api/1/databases/$db/collections`의 값을 덤프 PHP에서 JSON을 만들기 위해

관련 문제