2015-02-01 3 views
0

폼의 일부 데이터를 jQuery 컨트롤러에 게시하려고합니다. 하지만 여기서 어려움을 겪고 있습니다.POST 데이터를 jQuery에서 PHP로 보낼 수 없습니다.

입력란이있는 양식과 내 스크립트를 호출하는 버튼이 있습니다.

됩니다 단추

<button onclick="save('layoutstyle');">save</button> 

그리고 스크립트

function save(action) { 

jQuery("#formTest").submit(function(e) { 
    e.preventDefault(); 

    var $form = jQuery(this); 

    var $inputs = $form.find("input, select, button, textarea"); 

    var serializedData = $form.serialize(); 
    $inputs.prop("disabled", true); 

    jQuery.ajax({ 
     type: 'POST', 
     // TO DO 
     url: '/template/templates/nwmadm/controller.php', 
     data: 'save='+ action+'&data='+ serializedData, 
     dataType: 'html', 
     success: function(data) { 

      jQuery('#content').html(data); 

     } 
    }); 

}) 

}

그리고 PHP에서 컨트롤러는이

if (isset($_POST["save"])) { 
    switch ($_POST["save"]) { 

     case "layoutstyle": 
     $return = $_POST["data"]; 
     echo $return; 
     break; 

     case "surveys": 
     echo "This is the Surveys site"; 
     break; 

     default: 
     echo "Return 404 page not found"; 

    } 
} 

처럼 보인다하지만 만 받고 있어요 첫 번째 입력을 통해 컨트롤러에 연결하십시오. 그리고 그것은 배열이 아닌 문자열입니다.

어떻게해야합니까? 양식의 모든 입력을 컨트롤러로 배열로 가져 오는 방법은 무엇입니까? JQuery.ajax() 당신이 코드를 사용하는

+0

HTML의 모양은 어떻습니까? –

+0

'var serializedData = $ form.serializeArray();로 변경하면 어떨까요?serializedData.push ({name : "submit", value : action});'jQuery.ajax ({... data : serializedData, ...}); 이 방법은 직렬화 된 배열에'submit'을 추가하고'serializedData'를 통해 모두 전송합니다. – Sean

답변

2

:

data: 'save='+ action+'&data='+ serializedData, 

serializedDatafield1=val1&field2=val2과 같은 문자열입니다. 결과 데이터 문자열은 다음과 같이 표시됩니다. 즉,

save=layoutstyle&data=field1=val1&field2=val2 

잘못된 것으로 보입니다. 난 당신이 필요하다고 생각, 내가 코드를 시도 할 수 않았다

$action = $_POST["save"]; 
$field1 = $_POST["field1"]; 
$field2 = $_POST["field2"]; 
+0

하지만 im은 컨트롤러 "layoutstyle"에 첫 번째 필드를 가져 오는 중입니다. 다른 fileds는 가져 오지 않습니다. – bymem

+0

이게 무슨 뜻인지 모르시겠습니까? 전체 요청을 먼저 확인하십시오 (콘솔로 인쇄). 찾고있는 필드가 포함되어 있습니까? – Featalion

+0

글쎄, 사실은 왜 그런지 모르겠다. 하지만 지금이 코드는 제가 일하는 것이므로 제 대답은 ... 정말 고마워요. – bymem

0

하지만, 대신, 당신이 요청의 매개 변수에 액세스 할 수 있어야합니다 당신의 PHP 컨트롤러에서이 코드를

data: 'save=' + action + '&' + serializedData 

를 사용하려고

<input type="hidden" id="action" /> 
: 당신은 당신의 폼 내부에이 컨트롤을 설정할 필요가

양식 제출 이벤트 후, 콜백 함수에 컨트롤 비활성화 모드를 설정합니다

이것은 일부 프로젝트에서 사용한 사용자 정의 ajax 처리기 예제입니다. "ajaxHandlerForm (이, 'your_action') 자바 스크립트;"

onsubmit = 폼 태그에서 핸들러와 onsubmit 이벤트를 설정

/** 
* Custom ajax form handler. 
* @param {object} obj Reference to form 
* @param {String} action Name of Action 
* @returns {Void} 
*/ 
function ajaxHandlerForm(obj, action){ 
    // Prevent submit 
    event.preventDefault(); 
    // Set the action. #action is an input hidden in the form 
    $("#action").val(action); 
    // Set jQuery Ajax post : http://api.jquery.com/jquery.post/ 
    $.post($(obj).prop("action"), $(obj).serialize(), 
     function(data){ 
      // Set disabled mode 
      $(obj).find("input, select, button, textarea") 
        .prop("disabled", true); 
      // 
      $("#content").html(data); 
    }); 
} 
관련 문제