【问题标题】:Pass array created in Javascript function to PHP script with second function将 Javascript 函数中创建的数组传递给具有第二个函数的 PHP 脚本
【发布时间】:2017-09-01 13:07:33
【问题描述】:

我在 Javascript 函数中创建了一个数组。现在,当我按下 html 页面上的按钮时,我想将此数组传递给 php 脚本。我试图通过它调用以下函数:

function transferarray(param){
$.ajax({
    type:"POST",
    url:'selection.php',
    data:{param:param}
});

HTML 链接:

<a href='selection.php' id="counter" onclick="transferarray(arr)"></a>

(arr: 数组名)

但这不起作用(注意:未定义的索引:param in C:\xampp\htdocs\DataDict\selection.php 在第 17 行)。

数组 arr 甚至可以这样访问吗?我怎样才能使它可以访问?

请查看下面创建数组的代码:

var n = 0;
var arr = new Array();
function selectionarray(fish){
    var counter = document.getElementById("counter");
    var table = document.getElementById("variables");

    fish2=parseInt(fish)+1;
    var row = table.rows[parseInt(fish2)];

    squid = n*(parseInt(fish2));

    for(c=0; c<=squid;c++){
        if(typeof arr[c]==='undefined'){
            arr[c] = new Array();
        }
    }

    checkid='check'+fish;
    if (document.getElementById(checkid).checked){
        for(var j=0, col;col=row.cells[j];j++){
            arr[squid][j] = col.innerText;
        }
        n = n+1;
        counter.innerHTML = "selected Items: " + n;
    }else{  
        n = n-1;
        squid = n*(parseInt(fish2));
        delete arr[squid];
        counter.innerHTML = "selected Items: " + n;
    }
};

Javascript 从一个表中创建数组,其中复选框是由另一个函数动态创建的,这就是为什么我必须使用该变量来检查元素 ID。

【问题讨论】:

  • 您如何在 php 中访问该参数?
  • 如果你发布了一个php错误,你至少也应该发布相关的php代码。
  • 显示selection.php文件的代码
  • 为此使用除超链接以外的其他内容(例如,可以使按钮看起来像超链接,并且几乎任何元素都可以单击)。几乎可以肯定的是,超链接正在做默认情况下超链接所做的事情,并作为整页 GET 请求导航到 selection.php,所以您看到的输出是像这样访问 selection.php 的结果,而不是而不是 ajax 调用(如果它开始了,一旦你离开原始页面就会被取消)。因此它无法读取参数,因为它不是通过此请求传入的。
  • 或者,使用超链接,但使用带有event.preventDefault() 的jquery 不显眼的事件处理程序来处理点击事件。这将停止超链接的正常行为并允许 ajax 调用继续进行。见api.jquery.com/event.preventdefault。如果您实际上不希望它以正常方式导航到任何地方,也无需将selection.php 放入超链接的href

标签: javascript php jquery html arrays


【解决方案1】:

出于任何人的兴趣,我没有设法通过 ajax 将数组传递到“selection.php”页面,同时通过链接重定向到该页面。

我现在正在使用该链接创建一个子 html 站点并将数组直接传递给该站点上的 Javascript:

function transferarray(param){  
   var Openwindow = null;
   Openwindow = window.open('selection.html','jav','width=800,height=900,resizable=yes');
   Openwindow.dataFromParent = param;

然后在子窗口中调用数组

<script type="text/javascript">
var dataFromParent;    
function init() {
    var elem = document.getElementById('selectiontable');
    elem.innerHTML="";
    elem.insertAdjacentHTML('beforeend', '<thead><tr><th>Modul</th><th>Name</th><th>Variablename</th><th>Type</th><th>Code</th></tr></thead><tbody>');
    for (var x = 0; x < dataFromParent.length; x++) {
        elem.insertAdjacentHTML('beforeend', '<tr><td>' + dataFromParent[x][0] + '</td><td>' + dataFromParent[x][1] + '</td><td>' + dataFromParent[x][2] + '</td><td>' + dataFromParent[x][3] + '</td><td>' + dataFromParent[x][4] + '</td></tr>');
    }
    elem.insertAdjacentHTML('beforeend','</tbody>');
}
window.onload = init; 

我正在使用 'window.onload = init' 来执行该函数,因为由于某种原因我无法通过

从父窗口调用它

'Openwindow.init();'

这是为什么呢?

【讨论】:

    【解决方案2】:

    使用JSON.stringify() 序列化您的数组并发布数据

    function transferarray(param) {
    $.ajax({
        type: "POST",
        url: "selection.php",
        data: {param: JSON.stringify(param)}
        contentType: "application/json",
    });
    

    使用json_decode 将您的数据转换为一组 php 嵌套数组。

    【讨论】:

    • 感谢您的回答。尽管如此,仍然会收到相同的错误消息。我对数组进行了字符串化并发布了数据并尝试使用 '$myArray = json_decode($_POST['param']);' 调用它在“selection.php”页面中。
    猜你喜欢
    • 1970-01-01
    • 2011-03-08
    • 2015-06-02
    • 2013-12-09
    • 1970-01-01
    • 2017-11-07
    • 2019-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多