$ .AJAX Post不工作

时间:2012-10-28 15:20:44

标签: jquery mysql

我正在为我的网站构建一个简单的系统。问题是,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']));

原因是,我已经有一个自动获得相同数量的功能。

请帮忙。

2 个答案:

答案 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",因为您无论如何都不关心返回的内容。