php - 如果 3 个 Ajax 返回中只有 2 个是 Json,则 JQuery 不起作用

标签 php jquery json ajax

我遇到了以下问题。

我写了一个ajax请求,我的PHP文件做了一些检查并返回一个我用json_encode()回显的数组或一个正常的回显。这取决于我的 PHP 文件的检查结果。我的问题如下:

当我发出 Ajax 请求时 dataType: "json" 似乎只有当我从 PHP 文件返回一些 json_encode($array) 时它才起作用。如果我回显正常数据,Jquery 将无法工作。

一个小例子:

$.ajax(
            {
                type: "get",
                dataType: "json",
                url: "check_basket.php",
                data: {bought : bought, pid : pid, cid : cid, csid : csid, lang : lang},
                success: function(data){    
                            if(data.status == '1'){
                                alert(data.b);
                            } else if(data.status  == '2'){
                                alert(data.b);
                            } else {
                                 $("#dropdown_shopping_cart_inner").html(data);
                                 $('#head_shopping_cart').load(document.URL +  ' #head_shopping_cart');
                                 $('#dropdown_shopping_cart').slideDown(800);
                            }
                }
            }
        );

在我的 PHP 中我说了这样的话:

if(get_date_last_purchased($pid) == true){
    $arr = array('status' => 1, 'b' => 'test1');
    echo json_encode($arr);
}
elseif($bought > $row0['gm_max_order']){
    $arr = array('status' => 2, 'b' => 'test2');
    echo json_encode($arr);
} else {
    echo "everything ok";
}

如果发生前两种情况之一并且状态 1 或 2 返回到我的 JQuery,则一切正常。但是,当第三个 PHP 条件发生并且我的 PHP 仅返回 echo 而没有 json_encode 时,Jquery 根本不执行任何操作。

有什么建议吗?

最佳答案

在您的示例中,您明确请求一个 json。

尝试使用更短的符号来处理任一数据类型

$.get("check_basket.php",function(data){
//Do whatever you want to do with your data
}

但是你的问题是,你将不同的类型混合在一起......任何端点都应该只返回相同的数据类型和相同的格式,所以我建议oyu更改你的PHP

if(get_date_last_purchased($pid) == true){
    $arr = array('status' => 1, 'b' => 'test1');
    echo json_encode($arr);
}
elseif($bought > $row0['gm_max_order']){
    $arr = array('status' => 2, 'b' => 'test1');
    echo json_encode($arr);
} else {
    echo json_encode(array('status'=>0));
}

并像这样更改您的 jQuery 代码:

$.ajax(
        {
            type: "get",
            dataType: "json",
            url: "check_basket.php",
            data: {bought : bought, pid : pid, cid : cid, csid : csid, lang : lang},
            success: function(data){    
                        if(data.status == 1){
                            alert(data.b);
                        } else if(data.status == 2){
                            alert(data.b);
                        } else if(data.status == 0 ) {
                             $("#dropdown_shopping_cart_inner").html(data);
                             $('#head_shopping_cart').load(document.URL +  ' #head_shopping_cart');
                             $('#dropdown_shopping_cart').slideDown(800);
                        }
            }
        }
    );

此外,在检查状态 2 时,您检查的是 data == 2 而不是 data.status == 2

将其与简短的 get 语句结合起来,清理您的代码,您应该可以接受:

$.get('check_basket.php',function(data){
switch(data.status){
 case 0:
     $("#dropdown_shopping_cart_inner").html(data);
     $('#head_shopping_cart').load(document.URL +  ' #head_shopping_cart');
     $('#dropdown_shopping_cart').slideDown(800);
 break;
 case 1:
    alert(data.b);
    break;
 case 2:
    alert(data.b);
    break;
  }
});

或更短:

$.get('check_basket.php',function(data){
  if(data.status == 0){
     $("#dropdown_shopping_cart_inner").html(data);
     $('#head_shopping_cart').load(document.URL +  ' #head_shopping_cart');
     $('#dropdown_shopping_cart').slideDown(800);
  } else{
    alert(data.b);
  }
});

关于php - 如果 3 个 Ajax 返回中只有 2 个是 Json,则 JQuery 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34223985/

相关文章:

php - 如何使用 google speech api 翻译直播?

javascript - 根据存储在 MySQL 数据库中的 Google 地方信息中的位置搜索附近的位置?

javascript - jQuery contextMenu 根据 div 内容禁用项目

javascript - 将固定背景图像和滚动前部 div 添加到 html 页面

javascript - 从 Web 服务器中提取 json 数据到文本中

PHP - 获取一年中的最后一周数

php - PHP 的 JQuery ajax post 问题

php - 三个 SELECT 和两个 json

php - jquery 类型错误 : Response is null

javascript - 仅当从 angularJS 中的 ajax 调用完全接收到 json 时才更新 View