将数组从javascript传递到wordpress中的页面

时间:2017-03-20 03:03:21

标签: javascript php jquery ajax wordpress

我在wordpress中有一个页面,它使用jquery和ajax从外部api获取信息。表单将javascript中生成的数组发送回另一个变量,该变量是页面中的php用来确定要显示的页面。在wordpress之外,代码工作正常。在Wordpress内部运行第一部分,但之后不再加载同一页面,而是转到搜索页面并且没有找到任何内容。

输出的网址是:

http://kltools.net/?s=&post_type%5B%5D=portfolio&post_type%5B%5D=post&post_type%5B%5D=page

考虑到我使用post not get。这似乎很奇怪。

生成数组的javascript并提交表单:

function submitchans(){
  for (var i=0;i<chans.length;i++)
  { var newHidInp = document.createElement('input');
        newHidInp.type  = 'hidden';
        newHidInp.name  = 'chans[]';
        newHidInp.value = chans[i];
    form.appendChild(newHidInp);
  }
}
function livearray(input){
    if (input != null) {
    chans.push(input);
    }
    if (Y === cSize){
        submitchans();
        document.forms[0].submit();
    }

}

以前数组是outArray []而不是chans [],我改变它认为可能会触发结果,但没有运气。

这是代码的PHP部分:

<?php
$page_to_load = $_POST[view];
switch($page_to_load) {
    case '':
        echo "<script src=\"../scripts/jquery-3.2.0.min.js\"></script>";
        echo "<script type=\"application/javascript\" src=\"../scripts/raid.js\"></script>";
        echo "<font size=\"+3\" color=\"#FFFFFF\">Who should I host?<br>Please wait while channel is selected<br></font>";
        echo "<font size=\"+2\">";
        echo "<br><br>";
        echo "<img src=\"../_images/ajax_loader_blue_350.gif\">";
        $servername = "localhost";
        $username = "username";
        $password = "password";
        $dbname = "database";
        $chanarray[] = null;
        $offline = 0;

        // Create connection
        $conn = new mysqli($servername, $username, $password, $dbname);
        // Check connection
        if ($conn->connect_error) {
            die("Connection failed: " . $conn->connect_error);
        }

        $sql = "SELECT `TwitchNames` FROM TK_Members WHERE Validated='1' AND RaidMe='1'";
        $result = $conn->query($sql);

        if ($result->num_rows > 0) {
             // output data of each row
             while($row = $result->fetch_assoc()) {
                  array_push($chanarray, $row['TwitchNames']);
            }
        } else {
           echo "0 results";
        }
        array_splice($chanarray, 0, 1);
        $conn->close();
        echo "<script type=\"application/javascript\">";
        echo "var channels = ". json_encode($chanarray); 
        echo "</script>";
        echo "</font>";
        echo "<form id=\"form\" method=\"post\">";
        echo "<input type=\"hidden\" name=\"view\" value=\"page2\">";
        echo "</form>";
    break;

    case 'page2':
        echo "<font size=\"+3\" color=\"#FFFFFF\">Who should I host?<br>";
        echo "Your channel to host is:<br></font>";
        echo "<font size=\"+2\">";
        echo "<br><br>";
        $chans[] = null;
        $test = $_POST['chans'];
        foreach ($test as $chan) {
            $temparray = array(rand(),$chan);
            array_push($chans, $temparray);
        }
        array_splice($chans,0,1);
        sort($chans);
        echo "<a href=\"https://twitch.tv/".$chans[0][1]."\" target=\"_blank\">".$chans[0][1]."</a>";
        echo "<br><br><br>";
        echo "<a href=\"whoslive.htm\" target=\"_parent\">See All Live Channels</a>";
        echo "</font>";
    break;
}
?>

在处理了blokeish建议的内容之后,我已经修改了javascript文件以解决问题所在。

新的javascript文件是:

// JavaScript Document

var chans = ["test1","test2","test3"];



function submitchans(){
  for (var i=0;i<chans.length;i++)
  { var newHidInp = document.createElement('input');
        newHidInp.type  = 'hidden';
        newHidInp.name  = 'chans[]';
        newHidInp.value = chans[i];
     document.getElementById('chansform').appendChild(newHidInp);
  }
}
jQuery(function ($) {
        submitchans();
        document.getElementById('chansform').submit();

});

仅使用javascript点击提交,它会转到下一页。在数组传递中添加时失败。这是在执行期间返回的页面日志。 !! - 更正 - !!代码中有一个拼写错误,在将ID改为Id之后,代码按预期工作。

Array Errors

1 个答案:

答案 0 :(得分:1)

document.forms [0] .submit()可能会提交wp搜索表单,因为它可能是DOM中的第一个表单。我在网址中看到“http://kltools.net/ s = ”,其中“s”是搜索字词。

使用 document.getElementById('idOfForm')。如果页面中有多个表单,并且您无法确定其索引,则submit()可以解决该问题。