2017-07-19 16 views
0

我現在正在處理我的應用程序。我試圖使用抓取登錄頁面,但我真的不明白如何使用抓取甚至讀取代碼的一些例子。任何人都可以請幫我弄明白嗎?如何正確使用提取?

例如,我必須使用這些信息登錄到我的服務器。 用戶名:「用戶」 密碼:「1234」

那麼我想服務器回報登錄成功與否,並返回一個令牌,如果登錄電子是成功

我試圖用這個代碼

render() { 
return (
    fetch('mysite', { 
    method: 'POST', 
    body: JSON.stringify({ 
     username: "user", 
     password: "1234", 
    }) 
    }) 
    .then((response) => response.json()) 
    .then((responseJson) => { return responseJson.success; }) 
    .catch((error) => { 
    console.error(error); }) 
); 
} 

我不知道如何返回成功和令牌信息。 是否有此提取的標題?其實我不知道如何放置這段代碼。這是真的使用這個回報的渲染節?

謝謝您的建議。

回答

0

來自提取請求的初始響應是'Response'對象,請參閱:https://developer.mozilla.org/en-US/docs/Web/API/Response,或許您對Response.headers,Response.ok,Response.status或Response.statusText字段感興趣?

您可以在第一個.then回調函數中訪問響應的字段。在你的例子中,你只是調用'response.json()',它返回另一個承諾,當在第二個.then回調中解析時,這將導致從響應對象的JSON響應體中解析對象。在你的例子中,你從JSON對象中返回一個'success'屬性,這是JSON響應中的預期嗎?

MDN具有使用取這裏的一些很好的例子:https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch

+0

太謝謝你了。 – luftschloss

2

你不應該打電話給你渲染()函數中取功能,這使得函數將被調用時,因改變道具或狀態更新發生。如果你這樣做,取回請求將被多次調用,一次又一次。正確的工作流程如下:

enter image description here

因此,你應該讓你的結果取到的狀態,然後渲染狀態呈現功能,像這樣的僞代碼:

doFetch() { 
fetch('mysite', { 
    ... 
    }) 
}) 
.then((response) => response.json()) 
.then((responseJson) => { 
    this.setState({someData: responseJson.success}); //***** put the result -> state 
    }) 
.catch((error) => { 
    console.error(error); }) 
); 
} 

render() { 
    {/* whatever you would like to show for someData */} 
    <Text< {this.state.someData} </Text> 
    } 
} 
+0

非常感謝。我會嘗試這個解決方案。 – luftschloss