为什么我无法从我的网络服务器检索数据作为json,但我可以在localhost

时间:2016-06-10 11:20:20

标签: android json android-volley

我正在尝试创建一个连接到mysql数据库的简单登录应用程序。 当我在localhost中测试时,应用程序可以找到,但是当我将数据库和php脚本上传到托管服务器(Byethost)时,它无法正常工作, 问题似乎与服务器的响应字符串有关,它不是“JSON”

如上所述,当我在localhost中测试应用程序时,它的工作正常。

这里是Andorid Code

        requestQueue = Volley.newRequestQueue(this);
    StringRequest stringRequest = new StringRequest(Request.Method.POST, login_url, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            try{
                Log.d("#-SERVER RESPONSE-#",response);
                JSONObject jsonObject = new JSONObject(response);
                Log.d("#-LOGIN STATUS-#",jsonObject.getString("status"));
            } catch (Exception e){
                Log.d("#-JSON ERROR-#",e.toString());
            }//end if
        }
    },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.d("#-VOLLEY ERROR-#",error.toString());
                }
            }){

        @Override
        public Map<String,String> getParams(){
            Map<String,String> params = new HashMap<>();
            params.put(KEY_USERNAME,username);
            params.put(KEY_PASSWORD,password);
            return params;
        }
    };
    requestQueue.add(stringRequest);

这是php代码

    $username = mysqli_real_escape_string($connection,$_POST['username']);
$password = mysqli_real_escape_string($connection,$_POST['password']);

$query = "SELECT * FROM user WHERE username='{$username}' AND password='{$password}'";
$result = mysqli_query($connection,$query);

$json_reply['status'] = 1; //erorr by default

if(mysqli_num_rows($result) > 0){
  $json_reply['status'] = 0; //success
}

print(json_encode($json_reply));

以下是Android Monitor窗口的输出。

enter image description here

响应字符串

<html><body><script type="text/javascript" src="/aes.js" ></script><script>function toNumbers(d){var e=[];d.replace(/(..)/g,function(d){e.push(parseInt(d,16))});return e}function toHex(){for(var d=[],d=1==arguments.length&&arguments[0].constructor==Array?arguments[0]:arguments,e="",f=0;f<d.length;f++)e+=(16>d[f]?"0":"")+d[f].toString(16);return e.toLowerCase()}var a=toNumbers("f655ba9d09a112d4968c63579db590b4"),b=toNumbers("98344c2eee86c3994890592585b49f80"),c=toNumbers("99efa97c59e1cf6146f7e801802ed6bc");document.cookie="__test="+toHex(slowAES.decrypt(c,2,a,b))+"; expires=Thu, 31-Dec-37 23:55:55 GMT; path=/"; document.cookie="referrer="+escape(document.referrer); location.href="http://zsoft.byethost8.com/login.php?ckattempt=1";</script><noscript>This site requires Javascript to work, please enable Javascript in your browser or use a browser with Javascript support</noscript></body></html>

3 个答案:

答案 0 :(得分:0)

前一段时间我遇到过类似的问题,我不知道为什么但是我设法使用echo json_encode ( $ response , JSON_UNESCAPED_UNICODE ) ;而不是print来解决问题而转义编码中的特殊字符而不是mysqli,希望它有帮助

答案 1 :(得分:0)

似乎问题在于托管本身,我尝试了另一个托管(arvixe),一切都像魅力一样。我不知道为什么,但也许是因为它是一个付费的托管。

答案 2 :(得分:0)

许多免费托管服务提供商最后都附加了分析代码,这就是php文件失败的主要原因。

此类问题的最佳解决方案是使用

 <?php exit(); ?> 

在最后一个可执行语句之后,它将显式关闭PHP文件。

当您明确退出PHP文件时,代码将不会附加到JSON。