jQuery $ .ajax를 통해 JavaScript 배열을 PHP로 전달


79

PHP에서 JavaScript 배열을 조작하고 싶습니다. 이런 식으로 할 수 있습니까?

$.ajax({
       type: "POST",
       url: "tourFinderFunctions.php",
       data: "activitiesArray="+activities,
       success: function() {
            $("#lengthQuestion").fadeOut('slow');
       }
    });

활동은 다음과 같은 1 차원 배열입니다.

var activities = ['Location Zero', 'Location One', 'Location Two'];

이 작업을 시도해도 스크립트가 완료되지 않습니다. 어떻게 해결할 수 있습니까?


답변:


147
data: { activitiesArray: activities },

그게 다야! 이제 PHP에서 액세스 할 수 있습니다.

<?php $myArray = $_REQUEST['activitiesArray']; ?>

10
이 답을 찾기가 왜 그렇게 어려웠습니까!? 감사합니다. 이것이 제가 필요로하는 것입니다.
Vian Esterhuizen

해커처럼 간단합니다! 잘 했어! 당신은 나를 웃게 만들었습니다 : D.
Arashtad 회사

12

배열을 보내기 전에 JSON으로 인코딩하거나 다른 쪽 끝에 약간의 쓰레기가 생길 것입니다.

보내는 것은 배열뿐이므로 다음과 같이 할 수 있습니다.

data: { activities: activities }

자동으로 배열을 변환합니다.

자세한 내용은 여기 를 참조 하십시오 .


11

이것을 문자열로 바꿔야합니다. JSON2 라이브러리의 stringify 메서드를 사용하여이를 수행 할 수 있습니다.

http://www.json.org/

http://www.json.org/js.html

코드는 다음과 같습니다.

var myJSONText = JSON.stringify(myObject);

그래서

['Location Zero', 'Location One', 'Location Two'];

될 것입니다:

"['Location Zero', 'Location One', 'Location Two']"

서버에서이를 처리하는 방법에 대해서는 PHP 전문가에게 문의해야합니다. 나는 여기에 다른 답변이 해결책이라고 생각합니다.

유사한 방식으로 서버에서 데이터를 반환 할 수 있습니다. 즉, 다시 개체로 바꿀 수 있습니다.

var myObject = JSON.parse(myJSONString);

9

나는 이것에 대답하기에는 너무 늦을 수도 있다는 것을 알고 있지만 이것은 나를 위해 좋은 방법으로 일했습니다.

  1. 자바 스크립트 객체 (json)를 다음과 같이 문자열 화합니다. var st = JSON.stringify(your_object);

  2. POST 데이터를 "문자열"로 전달합니다 (jQuery를 사용할 수 있음). $.post('foo.php',{data:st},function(data){... });

  3. 서버 측 처리에서 데이터를 디코딩합니다. $data = json_decode($_POST['data']);

그게 다야 ... 데이터를 자유롭게 사용할 수 있습니다.

다차원 배열과 단일 배열은 일반 배열로 처리됩니다. 그들에 접근하려면 그냥 정상적인 $foo[4].

연관 배열 (javsacript 객체)은 php 객체 (클래스)로 처리됩니다. 그것들에 접근하려면 수업처럼하세요 : $foo->bar.


2

나는 다음과 같아야한다 :

$.post(submitAddress, { 'yourArrayName' : javaScriptArrayToSubmitToServer },
  function(response, status, xhr) {
    alert("POST returned: \n" + response + "\n\n");
  })

1

JQuery 직렬화 기능 사용

http://docs.jquery.com/Ajax/serialize

직렬화는 일반적으로 서버에 게시 할 사용자 입력 데이터를 준비하는 데 사용됩니다. 직렬화 된 데이터는 거의 모든 서버 측 프로그래밍 언어 및 프레임 워크 와 호환되는 표준 형식입니다 .


1

이것은 나를 위해 일했습니다.

$.ajax({
    url:"../messaging/delete.php",
    type:"POST",
    data:{messages:selected},
    success:function(data){
     if(data === "done"){

     }
     info($("#notification"), data);
    },
    beforeSend:function(){
         info($("#notification"),"Deleting "+count+" messages");
    },
    error:function(jqXHR, textStatus, errorMessage){
        error($("#notification"),errorMessage);
    }
});

그리고 이것은 당신의 PHP를 위해 :

$messages = $_POST['messages']
foreach($messages as $msg){
    echo $msg;
}

1

원하는 변수 이름에 배열 피연산자를 추가하는 PHP 내장 기능을 사용합니다.

다음과 같이 Javascript 배열에 값을 추가하면 :

acitivies.push('Location Zero');
acitivies.push('Location One');
acitivies.push('Location Two');

다음과 같이 서버로 보낼 수 있습니다.

$.ajax({        
       type: 'POST',
       url: 'tourFinderFunctions.php',
       'activities[]': activities
       success: function() {
            $('#lengthQuestion').fadeOut('slow');        
       }
});

activity [] 주변의 따옴표에 주목하세요. 값은 다음과 같이 사용할 수 있습니다.

$_POST['activities'][0] == 'Location Zero';
$_POST['activities'][1] == 'Location One';
$_POST['activities'][2] == 'Location Two';

0

PHP가 값을 문자열로 읽기 때문입니다. 내 데이터를 객체로 전달하고 싶지 않다면 (이전 답변에서도 괜찮습니다) PHP에서 다음을 수행합니다.

 $activitiesString = $_POST['activitiesArray'];
 $activitiesArray = (explode(",",$activitiesString));

마지막 줄은 모든 쉼표 다음에 문자열을 비트로 분할합니다. 이제 $ activitiesArray도 배열입니다. 쉼표가 없어도 작동합니다 (자바 스크립트 배열에 하나의 요소 만 있음).

즐거운 코딩 되세요!

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