[英]Uncaught type error: Cannot read property 'ajax' of undefined
我是 ember.js 的新手,這是我的第一個應用程序。 我想建立一個登錄表單,如果用戶輸入了正確的 email 和密碼,他應該被轉換到主頁。 我不確定是否應該將 Ember Data 用於登錄部分,但我在某處讀到 Ember Data 不適合這個特定的登錄任務,所以我應該提出 ajax 請求(這個假設正確嗎?)。 但是,當我提出請求時,我收到以下錯誤:
未捕獲的類型錯誤:無法在 LoginComponent.logUser 處讀取未定義的屬性“ajax”
我已經在登錄組件 class 中提出了 http 請求,但我不確定是否應該在這部分使用 controller,因為在控制器中處理的所有示例中都處理了該請求。 但是,我不知道如何使用登錄 controller 點擊登錄按鈕。
因此,除了如何處理我遇到的錯誤之外,我還有幾個問題:
預先感謝您的幫助!
這是我的代碼
login.hbs - 模板:
<h1 id="pageTitle">Log In</h1>
<Login/>
login.hbs - 組件:
<form {{on "submit" this.logUser}} id="login">
<label class='formElement labelLogin'>Email :</label><br>
<Input class='formElement input' @value={{this.email}}/><br>
<label class='formElement labelLogin'>Password :</label><br>
<Input class='formElement input' @value={{this.password}}/><br>
<button id="loginButton" class='button formElement' type="submit">Log In</button>
</form>
login.js - 組件 class
import Component from '@ember/component';
import { action } from "@ember/object";
import { tracked } from "@glimmer/tracking";
export default class LoginComponent extends Component{
@tracked email;
@tracked password;
@action
logUser(){
let userData = JSON.stringify({
'email' : this.email,
'password' : this.password
});
Ember.$.ajax({
url : 'https://gara6.bg/auto-api/users/login',
type : 'POST',
dataType: 'json',
data : userData,
}).then(() => {
alert('Logged In');
this.transitionToRoute('home');
}).catch(function(error){
alert(`Error: ${error}`);
});
}
}
路線.js:
import EmberRouter from '@ember/routing/router';
import config from 'gara6/config/environment';
export default class Router extends EmberRouter {
location = config.locationType;
rootURL = config.rootURL;
}
Router.map(function () {
this.route('login');
this.route('home');
});
這是使用 fetch 編輯的 login.js 組件 class:
import Component from '@ember/component';
import { action } from "@ember/object";
import { tracked } from "@glimmer/tracking";
export default class LoginComponent extends Component{
@tracked email;
@tracked password;
@action
logUser(){
let userData = {
'email' : this.email,
'password' : this.password
};
let fetchObject = {
method: 'POST',
headers : {
'Content-type' : 'application/json',
},
body : JSON.stringify(userData),
};
fetch('https://gara6.bg/auto-api/users/login',fetchObject)
.then(response => {
alert(response.status);
alert(response.statusText);
if(!response.ok){
alert('Network response was not ok');
}
alert(response.json());
return response.json();
// alert('Logged In');
// this.transitionToRoute('home');
}).then(data =>{
alert(data);
}).catch(error => {
alert(`There has been a problem with your fetch operation: ${error}`);//This is the only alert that shows up.
});
console.log(userData);
}
}
所以在我一個朋友的幫助下,POST請求轉換為GET的問題已經解決了。 原來問題出在表單元素上,默認情況下它具有預定義的功能,因此解決方案是使用 e.preventDefault() 來阻止它們。
這是已經工作的代碼:
import Component from '@ember/component';
import { inject as service } from '@ember/service';
import { action } from "@ember/object";
import { tracked } from "@glimmer/tracking";
export default class LoginComponent extends Component{
@tracked email;
@tracked password;
@service router;
@action
logRequest(){
let result=0;
let userData = {
'email' : this.email,
'password' : this.password
};
let fetchObject = {
method: 'POST',
headers : {
'Content-type' : 'application/json',
},
body : JSON.stringify(userData),
};
fetch('https://gara6.bg/auto-api/users/login',fetchObject)
.then(response => {
if(!response.ok){
throw new Error('Network response was not ok');
}
result=1;
})
.catch(error => {
alert(`There has been a problem with your fetch operation: ${error}`);
});
return result;
}
@action
logUser(e){
e.preventDefault();
let result = this.logRequest;
if(result){
alert('Logged in');
this.router.transitionTo('home');
}
else{
alert('Not logged in');
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.