직렬화 및 추가 데이터가 포함 된 jQuery post ()


147

serialize()양식 외부에있는 다른 데이터 를 게시 할 수 있는지 확인하려고합니다 .

여기에 내가 생각한 것이 있지만 'wordlist'양식 데이터 는 보내지 않고 보냅니다 .

$.post("page.php",( $('#myForm').serialize(), { 'wordlist': wordlist }));

누구든지 아이디어가 있습니까?

답변:


329

serializeArray [docs]를 사용 하고 추가 데이터를 추가 할 수 있습니다 .

var data = $('#myForm').serializeArray();
data.push({name: 'wordlist', value: wordlist});

$.post("page.php", data);

11
흠. 나는 내 솔루션보다 이것을 더 좋아한다고 생각한다. :) 나는 이것을 앞으로 시작할 것이다.
Michael Mior

@Gudradain : 그것은 잘 작동 : jsfiddle.net/fnjncqhv를 . 그래도 문제가 해결되지 않으면 다른 문제에 직면 한 것입니다.
Felix Kling

아닙니다. jsfiddle.net/fnjncqhv/1 serializeArray ()는 객체의 배열을 생성합니다. 각 객체에는 단일 속성이 포함되어 있습니다. 데이터 객체에 둘 이상의 속성이 포함되어 있으면 (예와 같이) 잘못된 객체가 생성되어 바인딩되지 않습니다. 서버 측. 문제를 해결하려면 답변을 편집하십시오.
Gudradain

2
@Gudradain : 답변에 대한 내 의견을 참조하십시오. 당신은 잘못. serializeArray당신이 생각하는 구조를 생성하지 않습니다. 데모로 무엇을 보여 주려고하는지 잘 모르겠습니다. 당신은 배열의 길이를 경고하고 있습니다. 내 데모 가 당신을 확신하지 못하면 문서를 참조하십시오 .
Felix Kling

1
@FelixKling 실패한 순간 죄송합니다. 설명해 주셔서 감사합니다. 추가하려는 모든 매개 변수에 대해 {name : 'your-paramater-name', value : 'your-parameter-value'} 형식이 실제로 필요한지 몰랐습니다.
Gudradain


9

ajax 파일 업로드에서이를 수행해야하는 경우 대체 솔루션 :

var data = new FormData( $('#form')[0] ).append( 'name' , value );

또는 더 간단합니다.

$('form').on('submit',function(e){

    e.preventDefault();
    var data = new FormData( this ).append('name', value );

    // ... your ajax code here ...

    return false;

});

5

양식 데이터에 자바 스크립트 객체를 추가하려는 경우 다음 코드를 사용할 수 있습니다.

var data = {name1: 'value1', name2: 'value2'};
var postData = $('#my-form').serializeArray();
for (var key in data) {
    if (data.hasOwnProperty(key)) {
        postData.push({name:key, value:data[key]});
    }
}
$.post(url, postData, function(){});

또는 serializeObject () 메소드를 추가 하면 다음을 수행 할 수 있습니다

var data = {name1: 'value1', name2: 'value2'};
var postData = $('#my-form').serializeObject();
$.extend(postData, data);
$.post(url, postData, function(){});

1
기본적으로 다음과 같은 배열이 생성됩니다 [{name: 'wordlist'}, {value: wordlist}]. jQuery가 이해하는 형식이 아니기 때문에 실제로 작동하지는 않습니다.
Felix Kling

@FelixKling serializeArray ()는 [{name1 : 'value1'}, {name2 : 'value2'}]을 생성합니다. 객체 데이터 {name3 : 'value3', name4 : 'value4'}가 있고 serializeArray ()에서 배열로 푸시하면 [{name1 : 'value1'}, {name2 : 'value2'}, { name3 : 'value3', name4 : 'value4'}]입니다. 배열의 마지막 객체가 유효하지 않으며 결과를 얻지 못합니다.
Gudradain

" serializeArray()생성합니다 [{name1: 'value1'}, {name2: 'value2'}]." 아닙니다. jsfiddle.net/akyz1Lcy
Felix Kling

4

새 버전의 jquery에서는 다음 단계를 통해 수행 할 수 있습니다.

  • 매개 변수 배열을 통해 얻을 serializeArray()
  • push()배열에 추가 매개 변수를 추가하기위한 호출 또는 유사한 메소드
  • $.param(arr)jquery ajax의 dataparam 으로 사용될 수있는 직렬화 된 문자열을 얻기 위해 호출하십시오 .

예제 코드 :

var paramArr = $("#loginForm").serializeArray();
paramArr.push( {name:'size', value:7} );
$.post("rest/account/login", $.param(paramArr), function(result) {
    // ...
}

3
$.ajax({    
    type: 'POST',  
    url: 'test.php',  
    data:$("#Test-form").serialize(),  
    dataType:'json',
     beforeSend:function(xhr, settings){
     settings.data += '&moreinfo=MoreData';
     },
    success:function(data){
            //  json response  
    },
    error: function(data) { 
        // if error occured
    }
    });

2

양식에 AJAX 요청을 해당 값으로 보내기 직전에 설정 한 추가 필드를 숨겨진 필드로 포함 할 수 있습니다.

또 다른 가능성은 이 작은 보석 을 하여 양식을 문자열 대신 자바 스크립트 객체로 직렬화하고 누락 된 데이터를 추가하는 것입니다.

var data = $('#myForm').serializeObject();
// now add some additional stuff
data['wordlist'] = wordlist;
$.post('/page.php', data);

라는 기존 함수가 없습니다 serializeObject. 너 그거 어디서 났니?
Jereme 원인

1

이것을 사용할 수 있습니다

var data = $("#myForm").serialize();
data += '&moreinfo='+JSON.stringify(wordlist);

0

나는 객체를 객체로 유지하고 미친 유형 이동을 좋아하지 않습니다. 여기 내 길이야

var post_vars = $('#my-form').serializeArray();
$.ajax({
  url: '//site.com/script.php',
  method: 'POST',
  data: post_vars,
  complete: function() {
    $.ajax({
      url: '//site.com/script2.php',
      method: 'POST',
      data: post_vars.concat({
        name: 'EXTRA_VAR',
        value: 'WOW THIS WORKS!'
      })
    });
  }
});

위에서 볼 수 없다면 .concat 함수를 사용하고 포스트 변수가 'name'이고 값이 'value'인 객체를 전달했습니다!

도움이 되었기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.