错误-预期的内容类型text / json得到了text / html

时间:2019-04-09 05:03:37

标签: php ios json

在此应用中尝试过Register函数后,它会通过UIAlert显示错误

  

错误

     

预期的内容类型{[“” text / json“,” application / json“,” text / javascript“)},得到了text / html。

如何解决这种类型的错误?查看Charles Proxy中的“概述”标签后,它确认Content-Typetext/html; charset=UTF-8。 Charles代理还显示正在输入usernamepassword,但似乎没有执行。

这是应用程序中使用的标题

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

是什么原因导致此错误,如何解决?

//the web location of the service
#define kAPIHost @"http://192.168.1.3:8888"
#define kAPIPath @"iReporter/"

修改

该应用程序应该使用AFNetworking中的iOS和其各自Json中的php web service的{​​{1}}注册用户到mysql数据库

lib.php(帮助连接到mysql数据库)

<?

//setup db connection
$link = mysqli_connect("localhost","root","root");
mysqli_select_db($link, "iReport");

//executes a given sql query with the params and returns an array as result
function query() {
global $link;
$debug = false;

//get the sql query
$args = func_get_args();
$sql = array_shift($args);

//secure the input
for ($i=0;$i<count($args);$i++) {
    $args[$i] = urldecode($args[$i]);
    $args[$i] = mysqli_real_escape_string($link, $args[$i]);
}

//build the final query
$sql = vsprintf($sql, $args);

if ($debug) print $sql;

//execute and fetch the results
$result = mysqli_query($link, $sql);
if (mysqli_errno($link)==0 && $result) {

    $rows = array();

    if ($result!==true)
    while ($d = mysqli_fetch_assoc($result)) {
        array_push($rows,$d);
    }

    //return json
    return array('result'=>$rows);

} else {

    //error
    return array('error'=>'Database error');
}
}

//loads up the source image, resizes it and saves with -thumb in the file name
function thumb($srcFile, $sideInPx) {

$image = imagecreatefromjpeg($srcFile);
$width = imagesx($image);
$height = imagesy($image);

$thumb = imagecreatetruecolor($sideInPx, $sideInPx);imagecopyresized($thumb,$image,0,0,0,0,$sideInPx,$sideInPx,$width,$height);

imagejpeg($thumb, str_replace(".jpg","-thumb.jpg",$srcFile), 85);

imagedestroy($thumb);
imagedestroy($image);
}

?>

Index.php(应用程序连接到该文件以通过AFNetworking Json响应调用php命令)

<?
/* iReporter complete web demo project
 *
 * index.php takes care to check the "command" request
 * and call the proper API function to process the user request
 * 
 */

// this line starts the server session - that means the server will "remember" the user
// between different API calls - ie. once the user is authorized, he will stay logged in for a while
 session_start();

 // the require lines include the lib and api source files
require("lib.php");
require("api.php");

// this instructs the client (in this case the iPhone app) 
// that the server will output JSON data
header("Content-Type: application/json");

// the iPhone app sends over what "command" of the API it wants executed
// the tutorial covers "login","register","upload", "logout" and "stream"
// so using a switch statement for this taks makes most sense

// the functions you call inside the switch are found in the api.php file
switch ($_POST['command']) {
case "login":
    login($_POST['username'], $_POST['password']); 
    break;

case "register":
    register($_POST['username'], $_POST['password']); 
    break;

api.php(连接到文件index.php以便调用应用程序中使用的服务器功能,例如登录和注册)

<?

// helper function, which outputs error messages in JSON format
// so that the iPhone app can read them
// the function just takes in a dictionary with one key "error" and 
// encodes it in JSON, then prints it out and then exits the program
function errorJson($msg){
print json_encode(array('error'=>$msg));
exit();
}

// register API
function register($user, $pass) {

//check if username exists in the database (inside the "login" table)
$login = query("SELECT username FROM login WHERE username='%s' limit 1", $user);

if (count($login['result'])>0) {

    //the username exists, return error to the iPhone app
    errorJson('Username already exists');
}

//try to insert a new row in the "login" table with the given username and password
$result = query("INSERT INTO login(username, pass) VALUES('%s','%s')", $user, $pass);

if (!$result['error']) {
    //registration is successful, try to also directly login the new user
    login($user, $pass);
} else {
    //for some database reason the registration is unsuccessfull
    errorJson('Registration failed');
}

}

//login API
function login($user, $pass) {

// try to match a row in the "login" table for the given username and password
$result = query("SELECT IdUser, username FROM login WHERE username='%s' AND pass='%s' limit 1", $user, $pass);

if (count($result['result'])>0) {
    // a row was found in the database for username/pass combination
    // save a simple flag in the user session, so the server remembers that the user is authorized
    $_SESSION['IdUser'] = $result['result'][0]['IdUser'];

    // print out the JSON of the user data to the iPhone app; it looks like this:
    // {IdUser:1, username: "Name"}
    print json_encode($result);
} else {
    // no matching username/password was found in the login table
    errorJson('Authorization failed');
}

}

//upload API
function upload($id, $photoData, $title) {

// index.php passes as first parameter to this function $_SESSION['IdUser']
// $_SESSION['IdUser'] should contain the user id, if the user has already been authorized
// remember? you store the user id there in the login function
if (!$id) errorJson('Authorization required');

// check if there was no error during the file upload
if ($photoData['error']==0) {

    // insert the details about the photo to the "photos" table
    $result = query("INSERT INTO photos(IdUser,title) VALUES('%d','%s')", $id, $title);
    if (!$result['error']) {

        // fetch the active connection to the database (it's initialized automatically in lib.php)
        global $link;

        // get the last automatically generated ID in the photos table
        $IdPhoto = mysqli_insert_id($link);

        // move the temporarily stored file to a convenient location
        // your photo is automatically saved by PHP in a temp folder
        // you need to move it over yourself to your own "upload" folder
        if (move_uploaded_file($photoData['tmp_name'], "upload/".$IdPhoto.".jpg")) {

            // file moved, all good, generate thumbnail
            thumb("upload/".$IdPhoto.".jpg", 180);

            //just print out confirmation to the iPhone app
            print json_encode(array('successful'=>1));
        } else {
            //print out an error message to the iPhone app
            errorJson('Upload on server problem');
        };

    } else {
        errorJson('Upload database problem.'.$result['error']);
    }
} else {
    errorJson('Upload malfunction');
}
}

//logout API
function logout() {

// by saving an empty array to $_SESSION you are
// effectively destroying all the user session data
// ie. the server won't "remember" anymore anything about
// the current user
$_SESSION = array();

// and to make double-sure, there's also a built-in function 
// which wipes out the user session
session_destroy();
}

//stream API
//
// there are 2 ways to use the function:
// 1) don't pass any parameters - then the function will fetch all photos from the database
// 2) pass a photo id as a parameter - then the function will fetch the data of the requested photo
//
// Q: what "$IdPhoto=0" means? A: It's the PHP way to say "first param of the function is $IdPhoto, 
// if there's no param sent to the function - initialize $IdPhoto with a default value of 0"
function stream($IdPhoto=0) {

 if ($IdPhoto==0) {

    // load the last 50 photos from the "photos" table, also join the "login" so that you can fetch the 
    // usernames of the photos' authors
    $result = query("SELECT IdPhoto, title, l.IdUser, username FROM photos p JOIN login l ON (l.IdUser = p.IdUser) ORDER BY IdPhoto DESC LIMIT 50");

} else {
    //do the same as above, but just for the photo with the given id
    $result = query("SELECT IdPhoto, title, l.IdUser, username FROM photos p JOIN login l ON (l.IdUser = p.IdUser) WHERE p.IdPhoto='%d' LIMIT 1", $IdPhoto);
}

if (!$result['error']) {
    // if no error occured, print out the JSON data of the 
    // fetched photo data
    print json_encode($result);
} else {
    //there was an error, print out to the iPhone app
    errorJson('Photo stream is broken');
}
}
?>

编辑:从应用程序登录屏幕尝试注册功能时显示错误

0 个答案:

没有答案