2013-05-19 5 views
0

내 ajax에 dataType:'json'data: {'post':val}을 사용하여 데이터를 PHP 파일에 보냅니다. val in data: {'post':val}은 변수입니다.
PHP 파일에 전송 된 데이터는 [object Object]이므로 php 변수에 할당하기 전에이를 디코딩해야합니다. 저는 JSON을 처음 사용하고 많이 알지 못합니다.
$id=$_POST['post'];을 시도했지만 보낸 데이터가 JSON 형식이므로 작동하지 않습니다. 값이 완벽 할 때 아약스에 할당됩니다
은 어떻게 '정상' 데이터를 보내거나 PHP 파일이 json_encode

참고로 아약스로 다시 전송되는 배열을 가지고로 dataType:'json'을 제거 whithout 데이터를 디코딩 할. (내가 alert({post:val}['post']);로 경고하면 결과는 내가 지정한 것입니다.)
PHP에서 JSON POST 디코드

function op_prof(obj) { 
    var xval = obj.id; 
    var dataString = "{'u_search':'"+xval+"'}"; 

    $.ajax({ 
    type: "POST", 
    url: '/script/profile.php', 
    data: dataString, 
    dataType: 'json', 
    cache: false, 
    success: function(data) { 
     console.log(data); 
    } 
    }); 
}; 
+0

당신은'json_decode' 사용법을 찾고 있습니다 :'$ id = json_decode ($ json) -> u_search;'. –

+0

당신은 PHP 스크립트 profile.php를 추가 할 수 있습니까? 데이터가 객체라는 사실은 jquery ajax eval json처럼 자동으로 정상입니다. – SmasherHell

답변

1

dataType 당신이에서 다시을 을 기다리고있어 데이터의 유형을 지정 -이 :

은 흠 .. 여기 내이
아약스 업데이트 (I 실수로 이전 코드에서 잘못된 게시) 입니다 섬기는 사람. 데이터가 JSON으로 전송되지 않습니다.

PHP 프로그램에 설정된 데이터가 [object Object] 인 경우 일부 개체가 문자열로 변환되어 전송되는 데이터에 포함될 수 있습니다. 정확하게 판단하기에 충분한 코드를 공유하지 않았습니다.

+0

@Quetin 코드를 업데이트했습니다. – Tom

+0

@Tom - 업데이트 후에 해당 코드는'[object Object] '가 아닌'{'u_search ': xval}'문자열을 보냅니다. – Quentin

+0

@Quetin 코드를 업데이트했습니다. '{ 'u_search': xval}'success :'의 코드는 실행되지 않습니다. – Tom

1

대신

data: {post: dataString} 

를 사용해야하고, PHP에서, json_decode($_POST['post']);를 사용합니다. 이 방법으로 게시 된 데이터의 이름 (여기에 'post')이 있으면 WebKit 관리자 또는 방화범을 통해 표시 할 수 있습니다.

당신이 data: dataString를 사용하는 경우

$_POST의 모든 데이터가되지 않습니다,하지만 당신은 여전히 ​​URL이 인코딩 $_SERVER["QUERY_STRING"]를 사용하여 PHP 스크립트에서 dataString를 검색 할 수 있습니다. 그래서 완성 된 라인은 dataString 간단한 비 중첩 된 객체로부터도 캐릭터 라인 경우, 당신은 JSON을 시간 인코딩을 저장하고 분석,

data: {key1: value1, 
     key2: value2} 

다음 $value1 = $_POST['key1'];와 PHP에서 값을 가져 오지 사용할 수 있습니다, 또한 $dataString = urldecode($_SERVER["QUERY_STRING"]);

해야한다 .

1

문제는 데이터를 문자열로 보내도록 준비하고 있다는 것입니다. 이럴 필요가 없습니다. data 매개 변수는 데이터 객체를 필요로하므로 객체를 지정하십시오. 그런 다음 서버 측에서 해당 객체 내의 각 데이터 조각은 별도의 게시물 변수로 도착합니다.

JS :

$.ajax({ 
    url: '/script/profile.php', 
    data: {foo: 'bar'}, //<-- our data is an object, not a string to be decoded 
    type: 'post' 
}).done(function(response) { 
    alert(response); //<-- alerts "received data "bar"!" 
}); 

PHP는

<?php 
if (isset($_POST['foo'])) echo 'received data "'.$_POST['foo'].'"!'; 
?> 

쿠엔틴가 언급 한 바와 같이, dataType PARAM는 데이터 형식이 다시 당신이에 를 전송하는 서버가 아닌 형식에서 을 기대 지시 그것.

+0

@Uktanos 코드를 업데이트했습니다 – Tom

+0

그래도 데이터를 JSON 문자열로 준비하고 있습니다. 이게 문제 야. 문자열 대신 객체로 준비하고 전달하십시오. JavaScript 나 PHP에서 JSON 문자열을 직접 만들지 않아도됩니다. – Utkanos

+0

'data : {u_search : 'xval'}'을 사용하면'success :'의 코드는 실행되지 않습니다 – Tom