2013-02-14 2 views
1

PHP에서 Jquery의 $ .ajax 함수로 JSON 문자열을 다시 보내는 것과 비슷한 동작이 나타납니다.jquery/PHP : 컬 문자열에서 NULL을 반환하는 중

브라우저에서 php 스크립트를 방문하거나 php로 명령 행을 통해 호출하면 완전히 유효한 JSON (jsonlint.com으로 테스트 됨)을 반환합니다. 그러나 HTML 파일에서 AJAX 호출을 할 때마다 항상 NULL이 반환됩니다. 기본적으로

는 PHP에서 나는이 일을 해요 :

// case in a switch that handles command 'getinfo': 
$url = "http://someapi.com:1234/api/entity/" . $tagid; 
$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_USERPWD, "user:pass"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

$reply = curl_exec($ch); 

header('Content-Type: application/json'); 
echo $reply; 

이이 밖으로 뱉어 :

[ { 
    "class" : "entity", 
    "guid" : "IT_EQUIPMENT_abcdef12345677890", 
    "retired" : false, 
    "deletable" : true, 
    "$aAssetTamper" : false 
} ] 

내가 함께 헤더없이도 함께하고 RETURNTRANSFER 세트없이 모두를 시도하고, 한() 선.

$.ajax({ 
    url: "gimmedata.php", 
    dataType: "json", 
    cache: false, 
    async: false, 
    data: { 'cmd' : 'getinfo', 'tagid' : $('#tag').val }, 
    success: function(data, textStatus) { 
     // rfcode location 
     console.log(data); 
    } 
}); 

상태는 항상 "성공"을 반환하고 데이터를 "[]"항상 다음 HTML 측면에서, 나는 Ajax를 호출하고 있습니다.

이상한 것은 내가 PHP 스크립트의 출력을 복사 한 다음 다시 스크립트 자체에 붙여 넣을 경우, 다음 컬를 거치지 않고 해당 문자열을 에코이며, 다음 내 AJAX 호출이 잘 작동 :

echo ' 
[ { 
    "class" : "entity" 
    "guid" : "IT_EQUIPMENT_abcdef12345677890", 
    "retired" : false, 
    "deletable" : true, 
    "$aAssetTamper" : false 
} ]'; 
return; 

$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_USERPWD, "user:pass"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

$reply = curl_exec($ch); 

header('Content-Type: application/json'); 
echo $reply; 

나는 그것이 무엇인지 모른다. 어떤 단서? curl_exec이 텍스트에 이상한 일을하고 있습니까?

+0

유효한 JSON이 반환되는지 확인하고 json_encode를 사용해 변경 사항을 확인 했습니까? – adeneo

답변

0

귀하의 데이터

잘못입니다 ...이 곳에서 $ _POST를보고 기대
0

php는 json_encode라는 멋진 기능을 가지고 있습니다. 아마도 코드를 코드에 통합하면 json의 유효성을 확인하는 데 도움이되는지 알 수 있습니다.

: http://php.net/manual/en/function.json-encode.php

둘째, 당신이 요청은 일반적으로 당신이하지 않는 한 사용할 수있는 가장 좋은 것은하지 않은, 동기있어,

은 또한 당신의 아약스 코드를 조정 해보십시오 그 주제에 거기 밖으로 많은 프로그래머

$.ajax({ 
    url: "gimmedata.php", 
    async: false, 
    data: { 'cmd' : 'getinfo', 'tagid' : $('#tag').val() }, 
    success: function(data, textStatus) { 
     // rfcode location 
     console.log(data); 
    } 
}); 

또한 PHP 코드가 te ajax 요청을 수신하는 방법에 대한 정보를 더 게시 할 수 있습니까?

data: { 'cmd' : 'getinfo', 'tagid' : $('#tag').val() }, 
:

data: { 'cmd' : 'getinfo', 'tagid' : $('#tag').val }, 

당신은없는 속성으로, 함수로 .val을 사용한다 : 나는 자바 스크립트에서 통과

+0

이제 더 이상 괴롭 히지 .... – AaplMike

0

이 게시물에 아무도 발생하지 않습니다.이 문제에 너무 처했습니다 ...

제 경우에는 컬링 요청을하기 위해 사용했던 변수가 제대로 할당되지 않았습니다. 그래서 하드 코딩 된 정보로 PHP 컬을 테스트 할 때 적절한 JSON 응답을 보여주고있었습니다. 하지만 JQuery Ajax를 통해 호출했을 때 JSON 데이터로 null이 반환되었다. 나는 잠시 머리를 긁고 컬이 응답에서 잘못된 데이터를 추가하고 있을지 모른다고 생각했다. 그러나 내가 마침내 요청이 이루어지기 전에 내 핵심 컬링 매개 변수가 실제로 정확하게 식별되었는지 확인하기에 충분히 좌절감을 느꼈을 때 낮은 수치를 보았습니다. 물론 그렇지 않았습니다.

들어오는 GET/POST 변수가 올바르게 할당되어 있는지 항상 확인하십시오!