2011-12-04 2 views
0

어떻게 dojo에서 php로 배열을 제출합니까? 나는 이러한 값을 제출하고 있습니다 :Dojo를 사용하여 PHP에 배열 제출

btn_send.onclick(function(){ 
      var name_array = name_looper(); 
      console.log(name_array); 
      dojo.xhrPost({ 

       url: "dojo_phpform.php", 
       content: {names: name_array}, 
       load: function(result) { 
        var x = dojo.byId('results'); 
        x.innerHTML = result; 
       } 
      }); 
     }); 

     function name_looper(){ 
      var names = dojo.query('input[type=text]'); 
      var name_array = []; 
      names.forEach(function(element, index, array){ 
       name_array[index] = dojo.attr(element, 'value'); 
      }); 

      return name_array; 
     } 

내가 PHP 파일 (dojo_phpform.php)에서 [ '이름'] $ _POST를 에코 시도 :

여기
["a", "b", "c"] 

내가 지금까지 가지고 무엇을 어떤 오류도 반환하지 않았습니다. 배열이 실제로 제출되지 않은 것 같습니다. 반환되는 유일한 것은 배열의 마지막 항목입니다. 어떻게해야합니까? 제발 도와주세요, 미리 감사드립니다!

+0

'var_dump ($ _ POST) '를 사용하여 무엇을 얻을 수 있는지 알아보십시오 –

+0

여기에 PHP 양식 코드를 게시 할 수 있습니까? – Philippe

+0

@Philippe : print_r ($ _ POST [ 'names']) 만 수행했습니다. PHP는 파일에 그 작동 여부를 확인 –

답변

2

Dojo의 xhr 기능은 지원하지 않습니다. 매개 변수를 "평평하게"하기 위해 도우미 함수를 사용하고 있습니다.

이것은 엉덩이가 싫어서, 분명히 1 차원 배열/개체에서만 작동합니다. 귀하의 경우에는 다음을 수행하십시오.

dojo.xhrPost({ 
    url: "dojo_phpform.php", 
    content: _flattenXhrParams({names: name_array}), 
    load: function(result) { 
     var x = dojo.byId('results'); 
     x.innerHTML = result; 
    } 
}); 

.. names[]=a&names[]=b&names[]=c과 같은 POST 매개 변수가 표시됩니다. 객체의 경우 names[somekey]=a&names[otherKey]=b 등을 얻을 수 있습니다. PHP는 둘 다 잘 처리합니다.

1

저는 콘텐츠 객체의 값이 문자열을 취한다는 것을 확신합니다. 배열을 제출하려면 배열을 JSON으로 변환 한 다음 서버에서 json_decode으로 변환해야합니다.

+0

내가 정확히 콘텐츠 개체를 사용하지 않으면 그것을 제출합니까? –

4

나는 이것을 grails와 php로 테스트했습니다. grails에서 dojo xhrPost를 통해 제출 된 배열을 얻는 데 아무런 문제가 없습니다. 예상대로 모든 값을 적절하게 구문 분석 한 배열을 검색합니다.

내가 게시 할 경우

dojo.xhrPost({ 
    content : { 
     names : ['foo', 'bar'] 
    }, 
    url : "mygrailscontroller" 
}); 

나는 다른 측면에 배열 PARAM를 얻을. 어떤 문제가 도장 측에서는 해결되지 않았지만 PHP 측에서는 증명됩니다.

PHP에서 양식 입력에 array 유형의 변수가있는 경우 name 매개 변수는 "names"대신 "names []"와 같이 대괄호로 설정해야합니다.

그래서 ... 귀하의 경우 솔루션은 배열을 문자열로 전개하지 않고 (미안) 배열 매개 변수에 대괄호로 이름을 지정하는 것입니다. 그래서 그것은 다음과 같습니다 :

dojo.xhrPost({ 
    content : { 
     "names[]" : ['foo', 'bar'] 
    }, 
    url : "myphpcontroller" 
}); 
+0

게시 해 주셔서 감사합니다. 가능하다는 사실을 알지 못했습니다. grails는'{ "names []": [ 'foo', 'bar']}'를 처리합니까? – Frode

+0

사실 grails에서 나는 [...]이 필요 없다 ... "name"이라는 이름의 인수를 받아들이지 만 서버는 그것을 배열로 가져온다. – Philippe

+0

물론, 나는 그것에 대해 완전히 잊었다. 좋은 작업. – DanMan

관련 문제