有谁能在这方面帮助我吗。我的问题是,当我ajax请求WordPress时,当我在控制台中记录响应时,它会显示error/complete
不response
.
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\'),
) );
});
编辑:这是控制台日志中的结果。
最合适的回答,由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
.