简体   繁体   English

使用ajax将Php变量传递给另一个变量?

[英]Passing Php Variable to another variable using ajax?

I have this JS/jQuery code 我有这个JS / jQuery代码

window.onload = function(){

    var request = $.ajax({
    url: "../wp-content/plugins/woocommerce/admin/test.php",
    type: "GET",            
    dataType: "html"
    //data: {$lastid},
    });

    request.done(function(msg) {
        $(".recent-orders").append(msg);
    });

    request.fail(function(jqXHR, textStatus) {
        alert( "Request failed: " + textStatus );
    });
EDIT: This is the method where I get the $lastid.


<?php
function woocommerce_dashboard_recent_orders() {

    $args = array(
        'numberposts'     => 8,
        'orderby'         => 'post_date',
        'order'           => 'ASC',
        'post_type'       => 'shop_order',
        'post_status'     => 'publish'
    );
    $orders = get_posts( $args );
    if ($orders) :
    echo '<ul class="recent-orders">';
        foreach ($orders as $order) :

            $this_order = new WC_Order( $order->ID );

            echo '
            <li>
                <span id = "order-$order->ID" class="order-status '.sanitize_title($this_order->status).'">'.ucwords(__($this_order->status, 'woocommerce')).'</span> <a href="'.admin_url('post.php?post='.$order->ID).'&action=edit">' . get_the_time( __( 'l jS \of F Y h:i:s A', 'woocommerce' ), $order->ID ) . '</a><br />
                <small>'.sizeof($this_order->get_items()).' '._n('item', 'items', sizeof($this_order->get_items()), 'woocommerce').' <span class="order-cost">'.__('Total:', 'woocommerce' ) . ' ' . woocommerce_price($this_order->order_total).'</span></small>
            </li>';

        endforeach;
        $lastid = $order->ID;
        echo '</ul>';
    else:
        echo '<p>' . __( 'There are no product orders yet.', 'woocommerce' ) . '</p>';
    endif;
}
?>

That calls a php file called test.php. 那将调用一个名为test.php的php文件。

test.php test.php的

    <?php
//woocommerce_dashboard_recent_orders_realtime();

/**
 * Init the dashboard widgets.
 *
 * @access public
 * @return void
 */

function filter_where( $where = '' ) {
    $oid = 2100;
    $where = " AND ID > $oid";

    return $where;

}


add_filter( 'posts_where', 'filter_where' );

    $args = array(
        'numberposts'     => 8,
        'orderby'         => 'post_date',
        'order'           => 'DESC',
        'post_type'       => 'shop_order',
        'post_status'     => 'publish',
        'suppress_filters' =>  FALSE
    );

    $orders = get_posts( $args );

    if ($orders) :
        foreach ($orders as $order) :
            //echo " $order->ID";
            $this_order = new WC_Order( $order->ID );
            echo '
            <li>
                <span id = "order-$order->ID" class="order-status '.sanitize_title($this_order->status).'">'.ucwords(__($this_order->status, 'woocommerce')).'</span> <a href="'.admin_url('post.php?post='.$order->ID).'&action=edit">' . get_the_time( __( 'l jS \of F Y h:i:s A', 'woocommerce' ), $order->ID ) . '</a><br />
                <small>'.sizeof($this_order->get_items()).' '._n('item', 'items', sizeof($this_order->get_items()), 'woocommerce').' <span class="order-cost">'.__('Total:', 'woocommerce' ) . ' ' . woocommerce_price($this_order->order_total).'</span></small>
            </li>';

            //echo (gettype($time3));
        endforeach;

    endif;
//}
?>

What I want to do is to pass the $lastid from the javascript to the test.php file and receive it as something like $lastid also. 我想要做的是将$ lastid从javascript传递到test.php文件,并将其接收为$ lastid之类的东西。

I know I should post, but I'm having trouble using it. 我知道我应该发布,但是我在使用它时遇到了麻烦。 Can anyone lead me to the right method? 谁能引导我找到正确的方法?

My CODE now 现在我的密码

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript" >
window.onload = function(){
    //setInterval(function(){
        //var lastid = '<?php echo $lastid; ?>';
        //alert(lastid);
        var request = $.ajax({
        url: "../wp-content/plugins/woocommerce/admin/test.php",
        type: "POST",      
        dataType: "html",
        data: { lastid : '<?php echo $lastid; ?>'},
        });

        request.done(function(msg) {
            $(".recent-orders").append(msg);
        });

        request.fail(function(jqXHR, textStatus) {
            alert( "Request failed: " + textStatus );
        });
        //addElement();

    //},1000);
setInterval(function(){


},1000);

}

</script>

<?php
function woocommerce_dashboard_recent_orders() {

    $args = array(
        'numberposts'     => 8,
        'orderby'         => 'post_date',
        'order'           => 'ASC',
        'post_type'       => 'shop_order',
        'post_status'     => 'publish'
    );
    $orders = get_posts( $args );
    if ($orders) :
    echo '<ul class="recent-orders">';
        foreach ($orders as $order) :

            $this_order = new WC_Order( $order->ID );

            echo '
            <li>
                <span id = "order-$order->ID" class="order-status '.sanitize_title($this_order->status).'">'.ucwords(__($this_order->status, 'woocommerce')).'</span> <a href="'.admin_url('post.php?post='.$order->ID).'&action=edit">' . get_the_time( __( 'l jS \of F Y h:i:s A', 'woocommerce' ), $order->ID ) . '</a><br />
                <small>'.sizeof($this_order->get_items()).' '._n('item', 'items', sizeof($this_order->get_items()), 'woocommerce').' <span class="order-cost">'.__('Total:', 'woocommerce' ) . ' ' . woocommerce_price($this_order->order_total).'</span></small>
            </li>';

        endforeach;
        $lastid = $order->ID;
        echo '</ul>';
    else:
        echo '<p>' . __( 'There are no product orders yet.', 'woocommerce' ) . '</p>';
    endif;
}
?>

<?php
function filter_where( $where = '' ) {
    $oid = 2110;
    $where = " AND ID > $oid";

    return $where;

}

$lastid = $_GET['lastid'];

add_filter( 'posts_where', 'filter_where' );

    $args = array(
        'numberposts'     => 8,
        'orderby'         => 'post_date',
        'order'           => 'DESC',
        'post_type'       => 'shop_order',
        'post_status'     => 'publish',
        'suppress_filters' =>  FALSE
    );


    $orders = get_posts( $args );
    echo "LAST ID: $lastid";
    if ($orders) :
        foreach ($orders as $order) :
            $this_order = new WC_Order( $order->ID );


            echo '
            <li>
                <span id = "order-$order->ID" class="order-status '.sanitize_title($this_order->status).'">'.ucwords(__($this_order->status, 'woocommerce')).'</span> <a href="'.admin_url('post.php?post='.$order->ID).'&action=edit">' . get_the_time( __( 'l jS \of F Y h:i:s A', 'woocommerce' ), $order->ID ) . '</a><br />
                <small>'.sizeof($this_order->get_items()).' '._n('item', 'items', sizeof($this_order->get_items()), 'woocommerce').' <span class="order-cost">'.__('Total:', 'woocommerce' ) . ' ' . woocommerce_price($this_order->order_total).'</span></small>
            </li>';

        endforeach;

    endif;
    remove_filter( 'posts_where', 'filter_where' );
//}
?>

I'm not sure if I understand if I understand your question, but it seems like your first page has already evaluated $lastId, most likely from an insert query... and you want to also set it to a javascript variable, while also using post method. 我不确定是否能理解您的问题,但是您的首页似乎已经对$ lastId进行了评估,很可能是通过插入查询来完成的,并且您还希望将其设置为javascript变量,同时使用post方法。 Assuming all that this is how I would for the first page 假设这就是我第一页的做法

<script>
var $lastid = <?php echo $lastid ?>;

...

window.onload = function(){

var request = $.ajax({
url: "../wp-content/plugins/woocommerce/admin/test.php",
type: "POST",            
dataType: "html"
data: {"lastid":$lastid},
});

request.done(function(msg) {
    $(".recent-orders").append(msg);
});

request.fail(function(jqXHR, textStatus) {
    alert( "Request failed: " + textStatus );
});

....

</script>

Then on the second page use this to access the post 然后在第二页上使用它来访问帖子

<?php
$lastid = $_POST['lastid'];
?>

That is how you do post in php hope this helps. 这就是您在php中发布帖子的方式,希望对您有所帮助。

Try the following in the original code 在原始代码中尝试以下操作

...
url: "../wp-content/plugins/woocommerce/admin/test.php?lastid=2098"
...

Then in test.php, access the variable using 然后在test.php中,使用

$lastid = $_GET['lastid'];

There are several other ways that this can be done, this is just a quick and dirty method. 还有其他几种方法可以完成,这只是一种快速而肮脏的方法。

1. Send the variable: 1.发送变量:

Change: 更改:

//data: {$lastid},

to: 至:

data: { lastid : '<?php echo $lastid; ?>'},

2. Get variable in test.php : 2.test.php中获取变量:

$lastid = $_GET['lastid'];
window.onload = function(){
var lastId = <?php echo $lastId; ?>;
var request = $.ajax({
url: "../wp-content/plugins/woocommerce/admin/test.php" + "?lastid=" + lastId,
type: "GET",            
dataType: "html"
//data: {$lastid},
});

request.done(function(msg) {
    $(".recent-orders").append(msg);
});

request.fail(function(jqXHR, textStatus) {
    alert( "Request failed: " + textStatus );
});

on test.php add this line 在test.php上添加此行

$lastId = $_GET['lastid'];

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM