2013-05-10 11 views
1

저는 JavaScript와 PHP를 처음 접했으며 JSON을 처음 접하고 사용합니다. 내 AJAX 요청은 괜찮다고 생각하지만, 그래도 $_POST 배열은 비어 있습니다. 여기

는 AJAX 호출이다

$("#submit").click(function() { 
    var submit_basic = $.post('index.php/submit_data/pass_basic_data', 
           get_experience_data() 
          ); 
    submit_basic.done(function(data) { 
     alert(data); // for debugging purposes 
    }); 
}); 

그리고,이 테이블의 데이터를 취하는 함수이다

function get_experience_data() { 

    var temp, data_exp = []; 
    $("#exptable tbody tr").each(function() { 

     temp = { 
      company: $(this).find('td').eq(0).html(), 
      position: $(this).find('td').eq(1).html(), 
      datestart: $(this).find('td').eq(2).html(), 
      dateend: $(this).find('td').eq(3).html(), 
      description: $(this).find('td').eq(4).html() 
     }; 

     data_exp = data_exp.concat(temp); 

    }); 

    return data_exp; 
} 

참조 용

는, 대상 컨트롤러 기능 만 $_POST를 인쇄 배열 (CodeIgniter를 사용하는 방식대로) :

public function pass_basic_data() { 
    var_dump($_POST);   
} 

찾을 수 없으므로 내가 작성한 오류를 정확히 지적 해 주시겠습니까? 고마워요!

UPDATE : 나는 특히이 메시지를 받고 있습니다 :

array(1) { 
    ["undefined"] => 
    string(0) "" 
} 

UPDATE : 모든 도움들에 대한

감사합니다! 나는 이미 그것을 풀었다. 그것은 나를 방 주위에 춤추게했다. {name : value} 쌍의 반환 값을 래핑했습니다. 나는 시작을 위해 다음을 수행 제안

$("#submit").click(function() { 
    var post_vars = get_experience_data(); 
    var submit_basic = $.post('index.php/submit_data/pass_basic_data', 
           {object: post_vars} 
          ); 
    submit_basic.done(function(data) { 
     alert(data); // for debugging purposes 
    }); 

}); 
+0

모든 '.each()'콜백은 리턴하기 전에 완료됩니다. –

+0

.each()에 대한 대안이 있습니까? –

+1

'$ .each'가 블로킹 중이므로 걱정하지 마십시오 - 완료 될 때까지 기다립니다. – Christoffer

답변

0

: 시도

var submit_basic = $.post('index.php/submit_data/pass_basic_data', get_experience_data()); 
+0

지적 해 주셔서 고맙습니다. 오타가 있었지만 여전히 $ _POST가 비어 있다고 생각하게 만드는이 오류가 발생했습니다 : array (1) { [ "undefined"] => 문자열 (0) "" } –

+0

get_experience_data()에 대한 함수 호출이 실패했거나 결과가 undef이기 때문에 서버에 실제로 '정의되지 않은'값을 보냈습니다. – deed02392

0

을이 :

var submit_basic = $.post('index.php/submit_data/pass_basic_data', get_experience_data()); 
// you need to add parentheses here --------------------------------------------------^ 

당신이 $.post()에 함수를 전달하면 그것이이다 콜백입니다 가정 응답이 수신 된 후에 호출 될 수 있습니다. 당신이 원하는 것은 함수를 호출하고 리턴 값을 $.post()으로 전달하는 것입니다. 그런데

,이 라인 : 새로운 배열 당신이 단지에 값을 추가하는 경우 모든 시간을 만들 수

data_exp.push(temp); 

필요가 없습니다 :

data_exp = data_exp.concat(temp); 

로 대체 될 수있다 종료.

+0

지적 해 주셔서 감사합니다. 그것은 오타였습니다. 여전히 $ _POST는 비어 있습니다. –

0

당신은 그렇지 않으면 당신이

0

실제 JQuery와 아닌 PHP 부분을 해결하려고 실행 기능을하지 전달하는, 메소드 get_experience_data을 실행해야합니다. 하지만를 heres 제안 : 여기

var post_vars = get_experience_data(); 
var submit_basic = $.post('index.php/submit_data/pass_basic_data', post_vars); 
+0

시도해도 여전히 동일한 결과가 나타납니다. –

+0

당신은 콘솔에 쿼리를 전달한 변수를 로깅하려고 할 수 있습니다 .. 그래서'return data_exp;를 추가하기 전에'console.log (data_exp);'를 추가하고 변수가 올바르게 전달되었는지 확인하십시오. – ppseprus

+0

또한, 당신은'var submit_basic = $. post ('index.php/submit_data/pass_basic_data', get_experience_data(), "json") 데이터 타입을 정의 할 수 있습니다. 그러나, – ppseprus

0

내 이전 대답을 더한 의견에 결론이지만, 메신저는 여전히 당신은 배열의 배열을 stingify 수하지 않도록 경우 ..

var submit_basic = $.ajax({ 
    type: "POST", 
    url: 'index.php/submit_data/pass_basic_data', 
    dataType: 'json', 
    async: false, 
    data: JSON.stringify(get_experience_data()), 
    success: function (response) { 
     alert(response); 
    } 
}); 

UPDATE :jsfiddle 스크립트 같은

에 따라 get_experience_data 기능을 수정 : 나는 get_experience_data()가`할 때까지 대기 한`생각하지 않습니다

temp = '{ '; 
temp+= '"company":"' +$(this).find('td').eq(0).html()+ '", '; 
temp+= '"position":"' +$(this).find('td').eq(1).html()+ '", '; 
temp+= '"datestart":"' +$(this).find('td').eq(2).html()+ '", '; 
temp+= '"dateend":"' +$(this).find('td').eq(3).html()+ '", '; 
temp+= '"description":"' +$(this).find('td').eq(4).html()+ '"'; 
temp+= ' }'; 
+0

JSON 구문 분석 오류가 발생합니다. –

+0

ive가 답변을 업데이트했습니다. 기능을 수정해야합니다. – ppseprus

관련 문제