为啥我的 ajax 请求得到响应 0?
Posted
技术标签:
【中文标题】为啥我的 ajax 请求得到响应 0?【英文标题】:Why is my ajax request getting response 0?为什么我的 ajax 请求得到响应 0? 【发布时间】:2013-10-22 14:35:45 【问题描述】:我已经在我的 wp 主题中设置了基本的 wordpress ajax 示例。触发器是由modernizr.js 检查页面上的媒体查询产生的。
jQuery(document).ready(function($)
if(Modernizr.mq('only all and (max-width:6300px)'))
var data =
action: 'my_action',
whatever: ajax_object.we_value // We pass php values differently!
;
// We can also pass the url value separately from ajaxurl for front end AJAX implementations
jQuery.post(ajax_object.ajax_url, data, function(data)
$("#trending-Container").html(data).fadeIn(1000);
);
);//end function
我已将我的脚本本地化并排入队列。
wp_enqueue_script('mainJS', get_template_directory_uri() . '/js/mainJS.js', array("jquery") );
wp_localize_script( 'mainJS', 'ajax_object',
array( 'ajax_url' => admin_url( 'admin-ajax.php' ), 'we_value' => 1234 ) );
最后处理请求的函数是:
add_action('wp_ajax_my_action', 'my_action_callback');
add_action('wp_ajax_nopriv_my_action', 'my_action_callback');
function my_action_callback()
global $wpdb;
$whatever = intval( $_POST['whatever'] );
$whatever += 10;
echo $whatever;
die();
这总是给我一个 0 的响应(没有属性),我不知道为什么。 P.S 这都是本地的。
Status code 200
Host:lart.co.uk
Origin:http://lart.co.uk
Referer:http://lart.co.uk/
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/28.0.1500.71 Chrome/28.0.1500.71 Safari/537.36
X-Requested-With:XMLHttpRequest
Form Dataview sourceview URL encoded
action:my_action
whatever:1234
【问题讨论】:
你能查一下exit(intval( $_POST['whatever'] ));
吗?
@RecoveringSince2003 你的意思是不是 die()?我试过了,还是没有。
尝试print_r($_POST);die();
以确保$_POST
不为空,包含该值。
还是0,我删除了所有my_action_callback()函数,它响应为0。函数处理程序不是被add_action触发的吗?
它应该根据您发布的代码触发。
【参考方案1】:
这里的一切都必须匹配:
PHP
add_action('wp_ajax_my_action', 'my_action'); add_action('wp_ajax_nopriv_my_action', 'my_action'); 函数 my_action()JS
变量数据 = 动作:'my_action', 随便:ajax_object.we_value ;此外,您缺少安全检查和更好地处理响应。 检查以下示例:[ 1 ] 和 [ 2 ]。
【讨论】:
还是什么都没有。我不认为其他“my_action”必须匹配并且可以只是函数的名称? 示例 #2 非常简单,您是否尝试过适应它? 啊,谢谢。查看示例 2 后,我能够调整代码并使其正确输出。无论如何谢谢:)【参考方案2】:如下图添加函数的“exit”结尾,这将修复return 0与WordPress中使用ajax请求时的响应。
add_action('wp_ajax_nopriv_getStateList', 'getStateList');
add_action('wp_ajax_getStateList', 'getStateList');
function getStateList()
global $wpdb;
$countryId = $_POST['countryId'];
$results = $wpdb->get_results("SELECT id,name FROM regions where country_id ='".$countryId."' ");
echo json_encode(array('status'=>200,'data'=>$results));
exit;
【讨论】:
感谢您的回答。也许您可以添加一些解释来解决此问题的变化? 我已经编辑了cmets,你可以在上面看到。对于您的 FYI,这将停止返回 0,并在 WordPress 中使用 ajax 请求进行响应。【参考方案3】:这是解决此问题的完整示例:
JavaScript:
$(document).ready(function()
$("#submit").click(function(e)
var demo = 'demo';
var ajaxurl = '<?php echo admin_url("admin-ajax.php", null); ?>';
data = action: "data_insert", demo: demo;
$.ajax(
url: ajaxurl,
data: data,
dataType: 'json',
type: 'post',
success: function(response)
console.log(response);
);
);
);
PHP:
add_action('wp_ajax_data_insert', 'data_insert');
add_action('wp_ajax_nopriv_data_insert', 'data_insert');
function data_insert()
$data = $_POST['demo'];
echo json_encode($data);
die();
【讨论】:
以上是关于为啥我的 ajax 请求得到响应 0?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我无法通过普通浏览器请求获得 ajax 请求的响应? [复制]
为啥浏览器对 OPTION 请求得到 200 响应和 503 响应?