2015-02-02 4 views
1

DB에서 두 값을 전환하고 다시 jQuery로 반환하는 간단한 코드가 있으므로 apge를 새로 고침 할 필요없이 사용자를 위해 전환 할 수 있습니다.

것은 배열로 반환합니다. console.log는 배열 ok를 표시하지만 배열에서 데이터를 가져 오는 방법을 알지 못합니다. PHP로

반환 :

$data = array($id, $img1, $img2); 
echo json_encode($data); 

jQuery를이 :

$.post("bg_images_ajax.php", "switch=yes&id="+id).done(function(data){ 
    $("#image-left-"+id).attr("src", "/images/backgrounds/"+data[1]).attr("alt", data[1]); 
    $("#image-right-"+id).attr("src", "/images/backgrounds/"+data[2]).attr("alt", data[2]); 
    console.log(data); 
}); 

데이터는 [1] 거의 내가 아약스와 함께 일하는 모든 시간을 일했다, 그러나 여기 그것은 전체 반환 배열을 보이는 간단한 문자열 (데이터 [2]는 배열의 세 번째 문자 인을 반환합니다. [ "6", "blabla", "blalablala"]이 console.log에 의해 반환 됨).

["id" = "6", "img1" = "blabla", "img2" = "blalablala"] 

그리고 내가 필요한 것을 얻을이를 사용하여 : :

나는 배열로 반환하도록 노력

data.img1 

을하지만 이것은 단지 undefined를 반환합니다.

jQuery.post에 대한 페이지를 확인했습니다. http://api.jquery.com/jquery.post/ 하지만 내가 뭘 잘못하고 있는지 알지 못해서 나는 장님이거나 너무 피곤합니다.

추신 : jQuery 코드에 대한 응답 형식을 시도했지만 작동하지 않았습니다. 정확히 어디에 배치 할 것인지, 여기에 표시된 것처럼 두 곳을 시도했습니다. 동시에).

$.post("bg_images_ajax.php", "switch=yes&id="+id, "json").done(function(data){ 
    $("#image-left-"+id).attr("src", "/images/backgrounds/"+data[1]).attr("alt", data[1]); 
    $("#image-right-"+id).attr("src", "/images/backgrounds/"+data[2]).attr("alt", data[2]); 
    console.log(data); 
}, "json"); 
+0

@Quentin advice를 따라 PHP 코드 상단에'header ("Content-Type : application/json");을 추가하십시오. 효과가있을 것입니다. – invisal

+0

나는 그랬지만 작동하지만, $ 기본 데이터 형식이 *** intelligent Guess ***는 반환 된 형식이 JSON인지 알아야한다. 그리고 당신이 그것을 바꿀 수 있어야한다는 것을 알지만 피 묻은 아이디어가 없어야 할 것입니다. ***. done (function ... ***.) PHP를 PHP와 jQuery로 사용하고 싶습니다. .... – MiChAeLoKGB

+0

올바른 콘텐츠 유형을 제공하는 PHP 작업이라는 점을 제외하면 예를 들어'hello.php'와 같이 브라우저는 일반적인 HTML 형식인지, XML 형식인지, 이미지인지, PDF인지, zip 파일, json 등 ... 가능한 형식은 수 백만 가지입니다. 브라우저에보고있는 콘텐츠의 유형을 브라우저에 알리는 것은 PHP 작업입니다. – invisal

답변

2

PHP의는

header("Content-Type: application/json"); 

누락 및 text/html를 전송을 디폴트있다.

jQuery는 예상 된 데이터 구조로 JSON을 구문 분석하는 대신 결과를 (잘못된) HTML 문자열로 처리합니다. 대신 (숫자 인덱스로 액세스 할 수 있습니다) 배열로 (이름 속성) 객체를 원하는 경우


또한, 당신은 PHP의 연관 배열로 시작해야합니다 :

$data = array("id" => $id, "img1" => $img1, "img2" => $img2); 
+0

좋아, 그게 효과가 있었는데, 왜 안 *** json_encode *** 그때? 나는 더 긴 쿼리를 위해 http://jquery.malsup.com/form/#getting-started를 사용하는데, PHP에서는 헤더가 필요 없다. 어쨌든 헤더없이 끝내는 다른 방법이 있습니까? – MiChAeLoKGB

+0

@MiChAeLoKGB - 말했듯이 jQuery를 JSON으로 보냈지 만 JSON이 실제로 HTML이라고 말했습니다. jQuery가 JSON으로 취급하고 싶다면 JSON을 JSON으로 지정해야한다. – Quentin

+0

좋아요, 그래서 ***, 'json'*** jQuery 코드를 추가해도 아무 효과가 없었습니까? 그리고 당신의 편집 : 예 나는 PHP에서 연관 배열을 시도했다. – MiChAeLoKGB