Angular 7没有发送XHR请求

时间:2019-02-11 13:57:23

标签: angular typescript

这是我在这里的第一个问题,所以我尽量保持简短。

那是我的角度方法:

delete(id: number): Observable<User[]> {
    console.log(id);
    return this.http.delete(`${this.baseUrl}/deleteUser`)
      .pipe(map(res => {
          const filteredUsers = this.users.filter((user) => {
            return +user['id'] !== +id;
          });
          return this.users = filteredUsers;
        }),
        catchError(this.handleError));
  }

我记录了ID,所以我知道它到目前为止可以使用,但是控制台之后的所有内容都可以。日志不起作用

我的api看起来像这样:

require 'connect.php';

// Extract, validate and sanitize the id.
$tp = ($_GET['id'] !== null && (int)$_GET['id'] >= 0)? mysqli_real_escape_string($con, (int)$_GET['id']) : false;
$id = (int)$tp;

var_dump($id);
if(!$id)
{
    return http_response_code(400);
}

// Delete.
$sql = "DELETE FROM `user_items` WHERE `user_items_id` ='{$id}' LIMIT 1";

if(mysqli_query($con, $sql))
{
    http_response_code(204);
}
else
{
    return http_response_code(422);
}

例如,当我键入localhost / api / deleteUser.php =?18时,它将成功删除用户ID为18的用户。

我在我的应用中多次请求此请求,该请求在其他任何地方都有效。我只是复制粘贴到其中并更改了我的类/数组/对象名称。

有人可以指出我的错误或给我替代方法的示例吗?

这是我的.htaccess的样子

# Remove the php extension from the filename
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]


# Set the headers for the restful api
Header always set Access-Control-Allow-Origin http://localhost:4200
Header always set Access-Control-Max-Age "1000"
Header always set Access-Control-Allow-Headers "X-Requested-With, Content-Type, Origin, Authorization, Accept, Client-Security-Token, Accept-Encoding"
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT, UPDATE"

我所有API中都需要的connect.php

<?php

// db credentials
define('DB_HOST', 'localhost');
define('DB_USER', 'example');
define('DB_PASS', 'example');
define('DB_NAME', 'example');

// Connect with the database.
function connect()
{
    $connect = mysqli_connect(DB_HOST ,DB_USER ,DB_PASS ,DB_NAME);

    if (mysqli_connect_errno($connect)) {
        die("Failed to connect:" . mysqli_connect_error());
    }

    mysqli_set_charset($connect, "utf8");

    return $connect;
}

$con = connect();

2 个答案:

答案 0 :(得分:5)

您没有在调用delete函数的地方添加代码,但是我假设您像someService.delete();那样调用它

它将不起作用,因为您返回一个Observable,该Observable仅在订阅时才起作用。所以您需要将其更改为

someService.delete(someId).subscribe()

someService.delete(someId).subscribe(callback)

希望获得帮助

答案 1 :(得分:0)

delete(id: number): Observable<User[]> {
    const params = new HttpParams()
    .set('id', id.toString());

    return this.http.delete(`${this.baseUrl}/deleteUser`, {params: params})
      .pipe(map(res => {
          const filteredUsers = this.users.filter((user) => {
            return +user['id'] !== +id;
          });
          return this.users = filteredUsers;
        }),
        catchError(this.handleError));
  }

订阅我的电话后,我将参数添加到我的delete方法中,现在可以使用了! 谢谢大家的帮助