gpt4 book ai didi

http - 获取请求时出现 Elm NetworkError,但控制台表示没问题

转载 作者:可可西里 更新时间:2023-11-01 15:26:52 25 4
gpt4 key购买 nike

我正在用 Elm 构建我的第一个网络应用程序,我遇到了一个问题,当我向本地服务器发出获取请求时,Elm 说它是“NetworkError”,即使浏览器控制台说它有效。

我做了一个最小的例子如下:

服务器是用 Haskell 和 Scotty 制作的:

{-# LANGUAGE OverloadedStrings #-}
module Main where

import Web.Scotty
import Data.Text.Lazy (pack)

main :: IO ()
main = scotty 3000 $ get "/" $ text $ pack "a"

当您向 localhost:3000 发出获取请求时,它所做的只是用字母“a”进行响应。如果有响应,Elm 应用程序只显示响应;如果有响应,则显示错误和一个用于执行获取请求的按钮:

import Http exposing (getString, send, Error)
import Html exposing (Html, text, br, button, body, program)
import Html.Events exposing (onClick)

type Msg
= DataRequest (Result Error String)
| Refresh

type alias Model =
{ response : String
, err : String
}

main : Program Never Model Msg
main = program
{ init = init
, view = view
, update = update
, subscriptions = subscriptions
}

subscriptions : Model -> Sub Msg
subscriptions _ = Sub.none

init : (Model, Cmd Msg)
init = ({ response = "", err = ""} , Cmd.none)

update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
case msg of
DataRequest (Err err) -> ({ model | err = toString err}, Cmd.none)
DataRequest (Ok response) -> ({model | response = response}, Cmd.none)
Refresh -> (model, send DataRequest (getString "http://localhost:3000"))

view : Model -> Html Msg
view {response, err} =
body []
[ text <| "Response: " ++ response
, br [] []
, text <| "Error: " ++ err
, br [] []
, button [ onClick Refresh ] [ text "Send request" ]
]

这是我发出 get 请求时浏览器控制台的屏幕截图。我对这些东西了解不多,但就我所见,它看起来不错。 Screenshot of browser console

我想要的是“Response”后面显示字母“a”,而“Error”为空白。相反,“错误”是“网络错误”,“响应”是空白。

我已将这个最小示例放在 Git 存储库中,以防有人愿意尝试并告诉我哪里出了问题:

https://github.com/8n8/elmnetworkerror

(我知道在 Elm http request returns NetworkError for successful requests 有一个非常相似的问题,但还没有答案,我认为它会从一个完整的最小示例中受益。)

最佳答案

我不能说你的错误是什么,但由于 CORS,我得到了一个错误:

Main.elm:1 Failed to load http://localhost:3000/:
No 'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'http://localhost:8000' is therefore not allowed access.

所以我调整了您的 Main.{hs,elm} 以在发生访问时从同一服务器提供文件:

主.elm

Refresh -> (model, send DataRequest (getString "/data"))

主.hs

main = scotty 3000 $ do
get "/" $ file "../index.html"
get "/data" $ text $ pack "a"

我没有使用 elm-reactor,而是运行 elm-make src/Main.elm --output=index.html

关于http - 获取请求时出现 Elm NetworkError,但控制台表示没问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48872325/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com