ajax response not recieving

时间:2020-05-27 作者:Raashid Din

有谁能在这方面帮助我吗。我的问题是,当我ajax请求WordPress时,当我在控制台中记录响应时,它会显示error/completeresponse.

jQuery(document).ready(function($) {
$(".pincode_search_field").on(\'keyup\', function(event) {
    event.preventDefault();
    var ajax_url = pin_shop.ajax_url;
    var pincode_search_field = $(this).val();
    var nonce  = $(this).data(\'nonce\');

    $.ajax({
        url: ajax_url,
        type: \'POST\',
        data: {
            \'action\'        : \'pincode_search_field\',
            \'nonce\'         : nonce,
            \'search_query\'  : pincode_search_field,
        },
    })
    .done(function(response) {
        console.log(response.database_result);
        console.log(\'success\');
    })
    .fail(function() {
        console.log("error");
    });
});
});

这是我的PHP代码。

  add_action( "wp_ajax_pincode_search_field", \'pincode_search_field\' );
add_action( "wp_ajax_nopriv_pincode_search_field", \'pincode_search_field\' );

function pincode_search_field() {
    global $wpdb;
    $pincode = $_REQUEST[\'search_query\'];
    if ( wp_verify_nonce( $_REQUEST[\'nonce\'], "pin_shop_nonce") ) {
        $result[\'database_result\'] = $wpdb->get_results("SELECT shop_id FROM cs_shop_details WHERE shop_pincode = $pincode");
        $result = json_encode( $result );
        echo $result;
        die();
    }
}
这是排队脚本。

add_action( \'wp_enqueue_scripts\', function(){
    wp_enqueue_script( \'pin-js\', plugins_url() . \'/pin-shop/inc/pin.js\', array(\'jquery\') );
    wp_localize_script( \'pin-js\', \'pin_shop\', array(
        \'ajax_url\' => admin_url(\'admin-ajax.php\'), 
    ) );
});
编辑:这是控制台日志中的结果。enter image description here

1 个回复
最合适的回答,由SO网友:Mort 1305 整理而成

根据jQuerydocumentation, dataType: \'json\' 支持。这就是returned 并由jQuery解析为success函数。需要更多信息来解决您的问题。

<罢工>是pin_shop.ajax_url 正确解决//site.com/wp-admin/admin-ajax.php? 如果不是,那就是你的第一个问题。(要进行检查,console.log(ajax_url); 就在你的美元之前。ajax调用我看到你的队列中有这个。

(另外,您是否注意到没有将结果返回给AJAX调用者?我在下面的代码中做了一个注释。)

下一步,您可能不会发送nonce。检查一下$(this).data(\'nonce\') 解析为nonce?(要进行检查,console.log(nonce); 就在你的美元之前。ajax调用。)

最后,您可能无法在服务器端正确解析nonce。要初步检查这一点,请注释掉PHP代码中的几行,并查看是否已将成功/完成记录到控制台,如下所示:

function pincode_search_field() {
    global $wpdb;
//  if ( wp_verify_nonce( $_REQUEST[\'nonce\'], "pin_shop_nonce") ) {
        $result[\'database_result\'] = $wpdb->get_results("SELECT ID FROM cs_shop_details WHERE pincode = \'192124\'");
        $result = json_encode( $result );
        die();
//  }
}
最后,SQL中可能有错误(如表中所示cs_shop_details 不存在或pincode 该表中不存在字段)。要检查这一点,请注释掉$result[\'database_result\'] = ... 和设置$result=array() 以便返回一个空结果(并确保$result 是回声)

(另外,我是新来的,如果有任何帮助,upvote将非常感谢您帮助我提高分数,以便我可以发表评论。)

EDIT: 经过一点调试,发现问题是PHP函数没有响应json编码的结果:addecho $result; 就在之前die().

EDIT 2: 帮助调试JSON响应。首先,请注意$wpdb->get_results() 将返回一个数组。您将该数组放入$results数组的database\\u result索引中。所以,你的结构现在看起来像这样。。。

Array (
    \'database_result\' => Array (
        [0] => Array(
            "shop_id" => 1
        )
        ... (other results here, indexed sequentially)
    )
)
所以,这个数组就是要返回到的.done(). 相应地通过访问此阵列response 传递给相关函数的JSON对象。我想大概是response.database_result[0]["shop_id"]response.database_result[0].shop_id.

相关推荐

两个循环,一个AJAX循环,将第一个循环中的帖子从第二个循环中排除,循环位于不同的文件中

我有两个显示帖子的循环:“default”循环(在home.php中),它显示five 职位。在页面底部有一个按钮,它调用AJAX调用,调用第二个循环并返回six 新职位。现在我需要第二个循环从第六个帖子开始,就好像这是第一个帖子一样。第二个循环中的每个页面显示六篇文章。底部代码的问题是,我的AJAX调用从“第二”页获得了六篇文章。但由于只显示了五个帖子,它跳过了帖子。如果我可以更改第二个循环,那么问题也会得到解决,第一个“页面”有五篇文章,其他页面有六篇。第二个循环代码放在函数中。php和名为loop的