2012-08-04 2 views
0

여기에이 질문이 많이 있다는 것을 알고 있습니다. 나는 같은 질문을 찾기 위해 하루 종일 걸렸다. 아무것도 내 대답을 할 수 없어! 그러니 제발, 내가 단지 복사하고 있다는 말을하지 마라.
내가 다른 JS 파일과 같은 페이지에서 호출되는 PHP 파일을 가지고,이 PHP 파일은 배열을 인코딩하고 그런 식으로 (즉,이 아약스 요청에서라고 할 때의) 같은 페이지에 메아리 :

$data = array( 
    "status" => $status, 
    "message" => $message, 
); 

echo json_encode($data); 

$ status 및 $ message의 값은 위 조건에 따라 결정됩니다 (여기서는별로 중요하지 않음). 이 PHP 파일은 인덱스 파일의 맨 위에서 호출되므로 JSON이 <!doctype html> 태그 앞에 반향된다는 의미입니다. 이제, JS 파일에, 여기에 내가이 JSON을 처리하려고하는 부분이다 :

$.post($formUrl, $formData, function(data) { 
    $data = $.parseJSON(data); 
    alert($data.status); 
}); 

이 변수에 대해 걱정하지 마십시오, 그들은 문제가되지 않습니다. 유일한 문제는 $data = $.parseJSON(data); 부분입니다. 이 코드를 실행할 때. 성공해도 아무 일도 일어나지 않지만, PHP 파일에는 올바르게 실행되는 데이터베이스에 대한 삽입 명령이 있습니다. 이 JSON을 제외하고 모두 잘 작동합니다. 얻을 수 없습니다! 내가하려고하면이 :

예상대로, 그것은 1. 경고 작품
$.post($formUrl, $formData, function() { 
    $str = '{"a":1,"b":2,"c":3,"d":4}'; 
    $data = $.parseJSON($str); 
    alert($data.a); 
}); 

그래서이 문제는 내가 당신에게로하기 때문에 $.parseJSON() 그들에 JSON과 함께 HTML 파일을 구문 분석 할 수있어, 무슨 생각, PHP 파일은 < !doctype html > 바로 앞에 JSON을 에코합니다.
나는 지금 필사적이다. 아무도 도와 줄 수 있니?

+0

서버의 응답을 게시 할 수 있습니까? –

+1

firebug 콘솔이나 chrome dev 도구의 오류가 있다면 – Rafay

답변

1

json_encode 바로 뒤에 다이를 사용해보십시오. $ _POST가 비어 있지 않은지 확인하는 if 문에서 모든 것을 래핑 할 수 있습니다. 따라서 첫 번째로드에서는 html을 얻을 수 있지만 아약스 게시물에서는 json 만 얻을 수 있습니다.

또한이를 사용해보십시오 :

$.ajax({ 
    url: $url, 
    data: $formData, 
    type: "POST", 
    dataType: "json", // this tells jquery to expect json back, and parses it automatically 
    success: function(data) { alert(data.status) } 
}) 
+0

예 예 예 예 예 !!! 대단히 감사합니다! 이것은 정답입니다! PHP 파일에서 "echo json_encode ($ data);"다음에 "die()"를 추가했습니다. js 파일에서 다음과 같이 사용했습니다 :'$.($ formUrl, $ formData, function (data) { \t \t \t 경고 (data.status); \t \t}, 'json'); 그리고 올바른 키를 알려줍니다. 고마워요! –

3

여기서 문제는 HTML을 반향하는 페이지에서 PHP 스크립트의 JSON을 출력한다는 것입니다. JSON 만 독점적으로 반영하는 PHP 스크립트가 필요합니다. 또한 PHP 파일에서 JSON MIME 유형을 보내려는 경우가 있습니다.

header("Content-type: application/json"); 
+0

+1하지만'$ .parseJSON'을 사용하기 때문에'header'는 필요 없습니다. –

+0

다른 페이지에서 JSON을 출력하는 스크립트가 필요할 때 사용할 수 있습니다. –

1

당신이 쉽게 그것을 할 수 있다고 생각합니다 ..

dataType에 대한 $.post()json로 네 번째 매개 변수를 보냅니다. $.post()

$.post($formUrl, $formData, function(data) { 

    // after specifying the dataType you 
    // don't need to parse is manually by $.parseJSON() 
    // jQuery will parse it for you 

    // $data = $.parseJSON(data); // remove this line 

    console.log(data); 

}, 'json'); 

구문은 다음과 같습니다

$.post(url [, data] [, success(data, textStatus, jqXHR)] [, dataType]) 

마지막 매개 변수 dataType을 지정했습니다.

+0

네가 너무 좋았어. 데이터 유형을 지정해야했습니다. 감사 :) –