Http只能获取httpbin.org
当在Http只能获取httpbin.org,http,task,elm,Http,Task,Elm,当在elm reactor中运行以下程序时(或使用elm make),我发现它实际上GETs的唯一网页是。否则,我会看到Http.NetworkError,即使在诸如“”或“”之类的可靠站点上也是如此。我完全不明白为什么会这样,有人能指出我的错误吗 module Main (..) where import Http import Html exposing (..) import Effects import Html.Events as Events import StartApp imp
elm reactor
中运行以下程序时(或使用elm make
),我发现它实际上GET
s的唯一网页是。否则,我会看到Http.NetworkError,即使在诸如“”或“”之类的可靠站点上也是如此。我完全不明白为什么会这样,有人能指出我的错误吗
module Main (..) where
import Http
import Html exposing (..)
import Effects
import Html.Events as Events
import StartApp
import Task
-- MODEL
type alias Model =
{ output : String }
type Action
= Response String
| Request String
| HTTPError Http.Error
-- UPDATE
update : Action -> Model -> ( Model, Effects.Effects Action )
update act mod =
case act of
Response str ->
( { mod | output = str }, Effects.none )
Request srv ->
let
effects =
srv
|> Http.getString
|> Task.map Response
|> flip Task.onError (Task.succeed << HTTPError)
|> Effects.task
in
( { mod | output = "GET: " ++ srv }, effects )
HTTPError err ->
( { mod
| output =
"Error: "
++ case err of
Http.Timeout ->
"Timeout"
Http.UnexpectedPayload str ->
"Unexpected payload: " ++ str
Http.BadResponse code str ->
"Bad response: " ++ toString code ++ ": " ++ str
Http.NetworkError ->
"Network error"
}
, Effects.none
)
-- VIEW
view : Signal.Address Action -> Model -> Html.Html
view address mod =
div
[]
[ div
[]
[ input
[ Events.on "input" Events.targetValue (Request >> Signal.message address) ]
[]
]
, div [] [ text mod.output ]
]
-- MAIN
app : StartApp.App Model
app =
StartApp.start
{ init = ( { output = "No requests made" }, Effects.none )
, update = update
, view = view
, inputs = []
}
main =
app.html
port tasks : Signal (Task.Task Effects.Never ())
port tasks =
app.tasks
主模块(..)其中
导入Http
导入Html公开(…)
进口效应
将Html.Events导入为事件
进口StartApp
导入任务
--模型
类型别名模型=
{输出:字符串}
类型动作
=响应字符串
|请求字符串
|HTTPError Http.Error
--更新
更新:动作->模型->(模型,效果,效果动作)
更新act mod=
案例行为
响应str->
({mod|output=str},Effects.none)
请求srv->
让
影响=
srv
|>Http.getString
|>Task.map响应
|>翻转Task.onError(Task.succeed Effects.Task
在里面
({mod|output=“GET:++srv},效果)
HTTPError错误->
({mod
|输出=
“错误:”
++案例错误
Http.Timeout->
“超时”
Http.UnexpectedPayload str->
“意外负载:”++str
Http.bad响应代码str->
错误响应:“++toString代码++”:“++str”
Http.NetworkError->
“网络错误”
}
,无影响
)
--看法
视图:Signal.Address操作->模型->Html.Html
查看地址模块=
div
[]
[div
[]
[输入
[Events.on“input”Events.targetValue(请求>>信号.message地址)]
[]
]
,div[][text mod.output]
]
--主要
应用程序:StartApp.app模型
应用程序=
开始
{init=({output=“无请求”},Effects.none)
,update=update
,视图=视图
,输入=[]
}
主要=
app.html
端口任务:信号(Task.Task Effects.Never())
港口任务=
应用程序任务
您很可能遇到跨源浏览器限制。在发出失败请求时,请查看浏览器javascript控制台。Chrome会记录如下错误:
无法加载XMLHttpRequest。请求的资源上不存在“Access Control Allow Origin”标头。因此不允许访问源“”
您的工作httpbin示例链接包括HTTP头访问控制允许来源:
,这是限制最少的设置
通过查找(代表跨源Http请求)上的信息,您可以了解更多关于这些类型的问题以及解决这些问题的方法