我正在为我的网站构建一个简单的系统。问题是,jquery帖子没有按照它应该做的那样工作。
数据库表中没有插入值,并且成功函数也不起作用..
所有数据库表都已设置。
HTML:
<a href="javascript:like('85','17','product','1','3');" class="button like_click"><span><img src="wp-content/plugins/assets/images/icons/like-icon.png"> Like </span></a>
这是我的jQuery。
function like(blog_id,object_id,object_type,user_id,default_count)
{
jQuery.ajax({
url: '/wp-content/plugins/assets/like.php',
type: 'post',
data: 'object_id=' + object_id + '&user_id=' + user_id + '&type=like&blog_id=' + blog_id + '&object_type=' + object_type,
dataType: json,
success: function(data)
{
jQuery('#' + object_id + '_count').html(data.total);
jQuery('.like_click').attr('href','javascript:unlike(\'' + blog_id + '\',\'' + object_id + '\',\'' + user_id + '\',\'' + object_type + '\',\'' + default_count + '\')');
jQuery('.like_click span').html('<img src="/wp-content/plugins/assets/images/icons/unlike-icon.png"> Unlike');
jQuery('.likes').html('You and <a href="#">' + default_count + ' others</a> like this.');
}
});
}
like.php
<?php
// include wordpress functions
include( $_SERVER['DOCUMENT_ROOT'] . '/wp-load.php');
require_once( $_SERVER['DOCUMENT_ROOT'] . '/wp-admin/includes/plugin.php' );
global $wpdb;
$global_likes = $wpdb->base_prefix . "global_likes";
$global_table = $wpdb->base_prefix . "global_products_table";
$object_id = mysql_real_escape_string($_POST['object_id']);
$user_id = mysql_real_escape_string($_POST['user_id']);
$blog_id = mysql_real_escape_string($_POST['blog_id']);
$object_type = mysql_real_escape_string($_POST['object_type']);
$type = mysql_real_escape_string($_POST['type']);
$check_duplicate = $wpdb->get_row("SELECT object_id FROM ".$global_likes." WHERE object_type = '" .$object_type . "' and object_id = '".$object_id."' and blog_id = '" . $blog_id . "' and user_id = '" . $user_id . "' ");
if( empty($check_duplicate->object_id) && isset($_POST['object_id']) && isset($_POST['user_id']) && isset($_POST['blog_id']) && isset($_POST['object_type']) ) {
if( $type == "like" ) {
$wpdb->insert(
$global_likes,
array(
'user_id' => $user_id,
'blog_id' => $blog_id,
'object_id' => $object_id,
'object_type' => $object_type
)
);
$add_like = "UPDATE " . $global_table . " SET likes=likes+1 WHERE products_id = '".$object_id."' and blog_id = '" . $blog_id . "'";
$wpdb->query($add_like);
} elseif( $type == "unlike" ) {
$remove_like = "UPDATE " . $global_table . " SET likes=likes-1 WHERE products_id = '".$object_id."' and blog_id = '" . $blog_id . "'";
$delete_user_like = "DELETE FROM ".$global_likes." WHERE object_type = '" .$object_type . "' and object_id = '".$object_id."' and blog_id = '" . $blog_id . "' and user_id = '" . $user_id . "'";
$wpdb->query($remove_like);
$wpdb->query($delete_user_like);
}
$sql = mysql_fetch_assoc(mysql_query("SELECT likes FROM ".$global_table." WHERE products_id = '".$object_id."' and blog_id = '" . $blog_id . "'"));
echo json_encode(array('total' => $sql[0]['likes']));
} else {
wp_die('Error!');
}
?>
是否也可以在不返回任何值的情况下发帖,因此我可以在like.php
上删除以下脚本。
$sql = mysql_fetch_assoc(mysql_query("SELECT likes FROM ".$global_table." WHERE products_id = '".$object_id."' and blog_id = '" . $blog_id . "'"));
echo json_encode(array('total' => $sql[0]['likes']));
原因是,我已经有一个自动获得相同数量的功能。
请帮忙。
答案 0 :(得分:2)
您的ajax方法中的数据不是json,而是将类型指定为json。
编辑以下注释:dataType用于预期的返回数据,但data:对象应该是键值对符号,如下例所示...
data: { object_id: object_id, user_id: user_id, type: 'like', blog_id: blog_id, object_type: object_type }
好吧,作为一个聪明人曾经说过RTM。结果证明这两种方法都有效。
来自Jquery文档...
data选项可以包含表单的查询字符串 key1 = value1&amp; key2 = value2,或形式为{key1:'value1',key2的地图: '值'}。如果使用后一种形式,则将数据转换为a 在发送之前使用jQuery.param()查询字符串。这个处理 可以通过将processData设置为false来规避。处理 如果您希望将XML对象发送到服务器,则可能不合需要; 在这种情况下,请更改contentType选项 application / x-www-form-urlencoded为更合适的MIME类型。
这意味着,尽管有赞成票,但这个答案根本无法解决您的问题,它只是一种语法替代方案。
答案 1 :(得分:0)
如果您不需要脚本中的任何输出,只需使用echo "{}";
,然后不要在javascript中对响应做任何事情。我在您的代码中看到的唯一错误是dataType: json
,但您应该已经解决了这个问题。
如果你的代码不能正常工作,请在调用ajax之后添加它,以便为你提供调试信息:
jQuery.ajax({...}).fail(function(){
console.log(arguments);
});
注意:您应该使用提供调试控制台的浏览器执行此操作,例如google chrome或firefox with firebug。
如果你检查了你的请求并得到500
这意味着你的PHP失败了,你需要从Javascript单独调试你的。
如果console.log(arguments)
说parseError
,你的php正在返回额外的字符,你需要查找/删除正在执行它的echo语句(它可能不是相同的.php文件)或者你可以将您的dataType更改为"text"
,因为您无论如何都不关心返回的内容。