【问题标题】:Cannot detect json_encode result from mysql in ajax success无法在 ajax 成功中检测到来自 mysql 的 json_encode 结果
【发布时间】:2014-11-14 10:21:45
【问题描述】:

我正在尝试从 MySql 获取成功 AJAX 的 JSON 响应。
这是我在控制台中遇到的错误 -> Uncaught SyntaxError: Unexpected token

我的 AJAX 代码。

    function getMessage(siteid)
    {   
    document.getElementById("add").disabled = true;
    $.ajax({
        type: "POST",               
        url: "checkSite.php",   
        data: { siteid : siteid }, //6 digit number
        success: function(data) {
            alert(data);
            var obj = jQuery.parseJSON(data);
            if(objData.status == "not available"){
                alert("Not Available");
                document.getElementById("add").disabled = false;
            }
            if(objData.status == "available"){
                alert("Available");
                document.getElementById("add").disabled = false;
            }
        },
        error: function(result){
            alert("error");
        }
    }); 
}

我的 checkSite.php

$siteid = $_POST['siteid']; 
if($siteid !=''){
   $sql = "SELECT * FROM  tablename WHERE siteid='$siteid'";
   $result2 = mysql_query($sql);
   if(mysql_num_rows($result2) > 0){        
       echo json_encode(array('status' => 'not available'));
   }
   else{            
    echo json_encode(array('status' => 'available'));
   }        

}

它告诉我parse Error. jQuery.parseJSON(data) 根本不起作用。

【问题讨论】:

    标签: javascript php jquery mysql ajax


    【解决方案1】:

    这一行有语法错误

    data: { siteid : siteid }
    

    在末尾加一个逗号

    data: { siteid : siteid },
                             ^
    

    【讨论】:

    • 谢谢。但我在这里错过了。但我的错误是成功的。
    • No Anish.. 我在 Success AJAX 中遇到问题。
    • 这是我的 colsole.log(data) <!DOCTYPE html> <html> <head> </head> {"status":"available"}
    • 你没有返回一个有效的json,它也有一个带有json的doctype,所以json无效。所以你可以做的只是删除 doctype 或 将你的 php 代码移动到一个不在 php 网页上的 php 文件。我更喜欢后者。
    • Jai,请建议我如何做同样的事情。谢谢
    【解决方案2】:

    尝试这样的事情和console.log 并检查结果

    $.ajax({            
    
        url         :   'checkSite.php',
        dataType    :   'json',
        cache       :   false,
        contentType :   false,
        processData :   false,
        data        :   { siteid : siteid },                           
        type        :   'post',
        success     :   function(data){ 
                        console.log (data);
       }
    });
    

    【讨论】:

      【解决方案3】:

      试试这个

      $.ajax({
                      type: "POST",               
                      url: "checkSite.php",   
                      data: { siteid : siteid }, //6 digit number
                      dataType : 'json'
                      success: function(data) {
                          if(data.status == "not available"){
                              alert("Not Available");
                              document.getElementById("add").disabled = false;
                          }
                          if(data.status == "available"){
                              alert("Available");
                              document.getElementById("add").disabled = false;
                          }
                      },
                      error: function(result){
                          alert("error");
                      }
                  }); 
              })
      

      【讨论】:

        【解决方案4】:

        对于“if($siteid !='')”的情况,您没有 else 块,因此您将从此服务调用中获得空,该服务调用无法在成功回调中被 JSON 解析。对于您的例外情况, if condition"if($siteid !='')" 似乎失败了。

        那么,你的checksite.php应该如下图所示。

        $siteid = $_POST['siteid']; 
        if($siteid !=''){
          if(siteid =='1'){        
               echo json_encode(array('status' => 'not available'));
           }
           else{            
            echo json_encode(array('status' => 'available'));
           }        
        
        }
        else
        {
             echo json_encode(array('status' => 'not a valid site id'));
        }
        

        编辑:

        这也可能是内容类型问题,使用 dataType 作为 json,并且不需要显式解析 json,可以跳过“jQuery.parseJSON(data);”行

        对于您的情况,我相信它采用 html,它可能会添加 html/header 标签,因此无法解析 JSON.parse。见下文,您修改后的代码。

        $.ajax({
            type: "POST",               
            url: "checkSite.php",   
            data: { siteid : siteid }, //6 digit number
           dataType : 'json',
           accepts: "application/json; charset=utf-8",
           success: function(data) {
                console.log(data);
                var objData= data;
                if(objData.status == "not available"){
                    alert("Not Available");
                    document.getElementById("add").disabled = false;
                }
                if(objData.status == "available"){
                    alert("Available");
                    document.getElementById("add").disabled = false;
                }
            },
            error: function(result){
                alert("error");
            }
        });
        

        希望这能解决您的问题!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-04-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-09-26
          • 2021-04-24
          • 2019-05-28
          • 1970-01-01
          相关资源
          最近更新 更多