【问题标题】:Update image src using AJAX and PHP function使用 AJAX 和 PHP 函数更新图像 src
【发布时间】:2017-10-24 12:31:43
【问题描述】:

我想在 WordPress 中使用 AJAX 更改点击功能上的图像。 这是我的代码:

JS:

jQuery(".swatchinput label").click(function(){
     var mycolor = jQuery(this).attr("data-option");
     var postid = jQuery(".single-product .product.type-product").attr("data-id");

        jQuery.ajax({
            cache: false,
            timeout: 8000,
            url: php_array.admin_ajax,
            type: "POST",
            data: ({ action:'theme_post_vimage', colorimg: mycolor, postvalue: postid}),

                  beforeSend: function() {                    
            },

            success: function(response){

                var myimageresponse = jQuery( response );
                jQuery( '.product-image a img' ).attr('src', myimageresponse);                                                      

            },

            error: function( jqXHR, textStatus, errorThrown ){
                console.log( 'The following error occured: ' + textStatus, errorThrown );   
            },

            complete: function( jqXHR, textStatus ){
            }


            });
    });

这是我在 PHP/WordPress 中的函数:

add_action('wp_ajax_theme_post_vimage','theme_post_vimage_init');
add_action( 'wp_ajax_nopriv_theme_post_vimage', 'theme_post_vimage_init' );
function theme_post_vimage_init() { ?>
<?php
global $post, $product, $woocommerce;    

 $postiID = $_POST['postvalue'];
 $colorname = $_POST['colorimg'];


$product = new WC_Product_Variable( $postiID );
$variations = $product->get_available_variations();
foreach ( $variations as $variation ) {
    if($variation['attributes']['attribute_pa_color'] == $colorname) :
    $myimageurl = $variation['image']['url'];
    echo $myimageurl;
    endif;
}
?>

<?php }

当我点击我的颜色时,这个错误会显示在我的浏览器控制台中:

Uncaught Error: Syntax error, unrecognized expression: http://samsonite.stuntmen.ae/wp-content/uploads/2017/05/PROD_COL_73353_1726_WHEEL-HANDLE-FULL.jpg

【问题讨论】:

    标签: jquery ajax wordpress woocommerce variations


    【解决方案1】:

    jQuery( response );错了……为什么不直接用response呢?

            success: function(response){
    
                jQuery( '.product-image a img' ).attr('src', response);                                                      
    
            },
    

    此外,我建议您将实现更改为类似的内容。

    PHP

    function theme_post_vimage_init() { 
    
        $postiID = $_POST['postvalue'];
        $colorname = $_POST['colorimg'];
    
    
        $product = wc_get_product( $postiID );
        $variations = $product->get_available_variations();
        $return = array(
            'status' => 'failed',
        );
        foreach ( $variations as $variation ) {
            if($variation['attributes']['attribute_pa_color'] == $colorname) :
                $return = array(
                    'status' => 'success',
                    'url' => $variation['image']['url'],
                );
            endif;
        }
        wp_send_json($return);
    }
    

    jQuery

    jQuery(".swatchinput label").click(function(){
         var mycolor = jQuery(this).attr("data-option");
         var postid = jQuery(".single-product .product.type-product").attr("data-id");
    
        jQuery.ajax({
            cache: false,
            timeout: 8000,
            url: php_array.admin_ajax,
            type: "POST",
            data: ({ action:'theme_post_vimage', colorimg: mycolor, postvalue: postid}),
    
                  beforeSend: function() {                    
            },
    
            success: function(response){
                if ( response.status === 'success' ) {
                   jQuery( '.product-image a img' ).attr('src', response.url);   
                }
                // you can also do something for response.status === 'failed'                    
    
            },
    
            error: function( jqXHR, textStatus, errorThrown ){
                console.log( 'The following error occured: ' + textStatus, errorThrown );   
            },
    
            complete: function( jqXHR, textStatus ){
            }
    
    
            });
    });
    

    寻找success我做了修改。

    【讨论】:

      【解决方案2】:

      data: ({ action:'theme_post_vimage', colorimg: mycolor, postvalue: postid}), 行替换为

      data: { action:'theme_post_vimage', colorimg: mycolor, postvalue: postid},
      

      在你的 ajax 输出中,你使用 '?>

      更重要的是,jQuery( response ) 在您的成功功能中是什么?仅使用response

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-10-24
        • 2014-12-21
        • 1970-01-01
        • 2016-08-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多