为什么jQuery.parseJSON会影响方法加载?

时间:2015-12-04 07:51:05

标签: php jquery ajax

我正在尝试在ajax之后加载页面的一部分...所以我在基于返回的数据后在java脚本中使用此代码:

var getPrice = $(this).closest('li');
var price = getPrice.next();
var id = $(this).attr('data-id');

    $.ajaxSetup({
        url: "do_cart_actions.php?action=qty",
        type: 'POST', 
        data: data, 
        success: function(data) {

            var result = jQuery.parseJSON(data);

            if(result.good == 1) {
                price.fadeOut('fast', function() {
                    price.load('show_cart.php .item_price_'+id, function() {
                        price.fadeIn('fast');
                    });
                });
            }
        }
   });
   $.ajax();

我的php文件返回:

echo '{ "good":"1" , "qty":"'. $_POST['a'] .'" }';

当我尝试这个时,chrome会返回以下错误:

Uncaught SyntaxError: Unexpected token <

奇怪的是,代码与fadeOut一起工作,如果我删除.load也可以使用fadeIn ....如果删除var result并返回一个数字&#39; 2&#39;从我的PHP文件和修改我的JavaScript这样:

if(data == 2) {
        price.fadeOut('fast', function() {
            price.load('show_cart.php .item_price_'+id, function() {
                price.fadeIn('fast');
            });
        });
}

现在,一切都运转良好。所以我唯一的理论是,可能存在load方法和jQuery.parseJSON

的问题

有什么想法吗?

4 个答案:

答案 0 :(得分:4)

第一次在您的PHP .. 相反

echo '{ "good":"1" , "qty":"'. $_POST['a'] .'" }';

你很容易使用json函数:

echo json_encode(array('good'=>1,'qty'=>$_POST['a']));

在您的javascript第二位:

success: function(data) {
    var result = jQuery.parseJSON(data);

您不需要解析数据,因为它已经是JSON格式。

为了确保在你回复json_encode之前你可以添加PHP代码和json标题:

header('Content-Type: application/json');

!!!附: !!!

请勿使用ajaxSetup来处理您的请求!它会影响你做的任何下一个ajax请求,这可能会成为一个问题!

答案 1 :(得分:1)

这是什么?

price.load('show_cart.php .item_price_'+id, // ...

为什么要将路径与PHP文件和CSS选择器结合起来?

我可能猜测它会尝试加载给定的网址,如show_cart.php .item_price_3,找不到这样的页面(显然),返回带有404错误的HTML页面,由于标记打开{{1,因此未被解析为JSON }}。打开开发人员控制台<标签,您会看到网址不正确,提出错误请求。

另外,为什么使用Network?对于特定的AJAX调用,您应该使用:

$.ajaxSetup

});

另请注意,最新的jQuery版本中不推荐使用$.ajax({ url: "do_cart_actions.php?action=qty", type: 'POST', data: data, success: function(data) { var result = jQuery.parseJSON(data); if(result.good == 1) { price.fadeOut('fast', function() { price.load('show_cart.php .item_price_'+id, function() { price.fadeIn('fast'); }); }); } } 。请改用success处理程序。

答案 2 :(得分:1)

服务器端:

echo json_encode(array('good'=>1,'qty'=>$_POST['a']));

Clienti方面:使用 dataType

$.ajaxSetup({
            url: "do_cart_actions.php?action=qty",
            type: 'POST', 
            data: data, 
            dataType : 'json',
            success: function(result) {

            if(result.good == 1) {
                price.fadeOut('fast', function() {
                    price.load('show_cart.php .item_price_'+id, function() {
                        price.fadeIn('fast');
                    });
                });
            }
        }
   });

答案 3 :(得分:0)

您是否尝试在console.log()中显示?

结果的内容

var result = jQuery.parseJSON(data);

以防万一有问题。