получить доступ к массиву JavaScript из файла php

0

Как я могу передать aa javascript массив vArray в File.php и извлечь два значения из vArray.

Я пытался:

<input type="button" id="button" onClick = "send_V();" >

<script>
// Creat Array with Values from checkboxes
$('input[type=checkbox]:checked').each(function() {
    vArray.push($(this).val());
});

// Set array to only 2 values ( disable checkboxes)
var n = $('input[type=checkbox]:checked').length >= 2;  
$('input[type=checkbox]').not(':checked').attr('disabled',n);

// Send array to File.php where I can manipulate its value1, and value2 to query db
function send_V(vArray)
{
    $.ajax({
        type: "POST",
        url: "File.php", 
        beforeSend: function () {
            $("#result").html("<option>Loading ...</option>");
        },
        data: "vArray="+vArray,
        success: function(msg){
            $("#result").html(msg);
        }
    });
} 
</script>

и на стороне php (File.php)

$value = $_POST['vArray'];
var_dump(vArray);

но я не могу и уверен, как манипулировать переменной javascript. может ли кто-нибудь показать мне простой и эффективный метод? Что не так в этой логике? благодаря

  • 5
    на стороне клиента: сериализация в JSON. сторона сервера: декодировать в массив php с помощью json_decode ()
  • 0
    Это не обязательно должен быть JSON; это зависит от того, что хочет сервер. Если параметр «data» представляет собой объект JavaScript со свойством «vArray», в качестве значения которого используется массив, то jQuery отправит серверу набор параметров на основе имени свойства («vArray []»).
Теги:

4 ответа

2

Используйте json. Кодировать массив в js (как кодировать объект javascript как JSON?), Декодировать его в php (http://php.net/manual/ro/function.json-decode.php).

1

Если вы настроили вызов ajax с объектом для параметра "data":

$.ajax({
   type: "POST",
   url: "File.php", 
   beforeSend: function () {
     $("#result").html("<option>Loading ...</option>");
   },
   data: { vArray: vArray },  // here
   success: function(msg){
     $("#result").html(msg);
   }
 });

Затем jQuery будет создавать параметры HTTP-запроса следующим образом:

 vArray[]=first value
 vArray[]=second value

и т.д. На стороне сервера, когда вы получаете доступ

 $vArray = $_POST['vArray'];

вы вернете массив. Другими словами, вам не нужно явно связываться с JSON, если вы этого не хотите.

1

Чистый javascript для современного браузера (требуется поддержка formData & xhr2) (хром, сафари, ios, android, т.е.10)

JS

var vArray=['a','b','c'],
json=JSON.stringify(vArray);//this converts the array to a json string

function ajax(a,b,e,d,c){ //Url,callback,method,formdata or{key:val},placeholder
 c=new XMLHttpRequest;
 c.open(e||'get',a);
 c.onload=b;
 c.send(d||null)
}
function whatever(){
 console.log('json posted',this.response)
}

ajax('page.php',whatever,'post',{'json':json});

page.php

<?php
print_r(json_decode($_POST['json']));//converts the json string to a php array
?>

Другое решение - разместить всю форму

HTML

<form>
<input name="a" value="x">
<input type="radio" name="b" value="x">
//and many other input & text fields
</form>

JS

function ajax(a,b,e,d,c){ //Url,callback,method,formdata or{key:val},placeholder
 c=new XMLHttpRequest;
 c.open(e||'get',a);
 c.onload=b;
 c.send(d||null)
}
function whatever(){
 console.log('form posted',this.response)
}

var form=document.getElementsByTagName('form')[0],
    fd=new FormData(form);

ajax('page.php',whatever,'post',fd);

PHP

<?php
print_r($_POST);
?>

xhr2

https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest

FormData

https://developer.mozilla.org/en-US/docs/Web/API/FormData

0

Я пробовал следующее, что, кажется, работает нормально:

<script language="JavaScript" type="text/javascript">
function ajax_post(){

// Create our XMLHttpRequest object
var hr = new XMLHttpRequest();

// Create some variables we need to send to our PHP file
var url = "my_parse_file.php";
var fn = document.getElementById("first_name").value;
var ln = document.getElementById("last_name").value;
var vars = "firstname="+fn+"&lastname="+ln;
hr.open("POST", url, true);
// Set content type header information for sending url encoded variables in the request
hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

// Access the onreadystatechange event for the XMLHttpRequest object
hr.onreadystatechange = function() {
    if(hr.readyState == 4 && hr.status == 200) {
        var return_data = hr.responseText;
        document.getElementById("status").innerHTML = return_data;
    }
}
// Send the data to PHP now... and wait for response to update the status div
hr.send(vars); // Actually execute the request
document.getElementById("status").innerHTML = "processing...";
}
</script>

Он работает очень хорошо для меня. Код, взятый из http://www.developphp.com/view.php?tid=1185

Ответы @Pointy и @Cocco могут быть правильными, я не смог реализовать его с JQuery, не хотел использовать форму. Надеюсь, это поможет кому-то

Ещё вопросы

Сообщество Overcoder
Наверх
Меню