【问题标题】:iron-request doesn't make more than one requestiron-request 不会提出多个请求
【发布时间】:2017-06-29 22:43:41
【问题描述】:

我正在使用Polymer 2 库。每当我尝试使用iron-request 发出多个请求时,代码似乎只会在第一次启动时发出 POST 请求。任何后续请求似乎都会被忽略,即使设置为发送到服务器的数据与初始请求不同。

我在这个 Plunker 中写了一个小例子:https://plnkr.co/edit/cozVKUdQ2q2SV46rcCTL?p=preview

我创建了一个 Iron-request 和一个按钮元素来发起请求,如下所示:

<paper-button on-click="save" class="green">Send</paper-button>
...
<iron-request id="xhr"></iron-request>

保存功能设置为从文本区域获取文本并将其发送到服务器。

save() {
    var response = this.$.xhr.send({
      url: "https://httpbin.org/post",
      headers: {
        'content-type': 'application/x-www-form-urlencoded'
      },
      body: {
        content: this.inputdata
      },
      method: "POST"
    });
    var poly = this;
    this.$.xhr.completes.then(function(data) {
      console.log("finished");
      poly.$.responsetext.innerHTML = data.response;
    })

有问题的代码在“element1.html”文件中。如果您尝试发送不同的文本负载,则只会发送第一个请求。 (您可以在响应框中看到表单“内容”字段保持不变。)

知道发生了什么吗?我在想,每次我需要提出新请求时,我都必须创建新的 Iron-request 元素……但这听起来不是一个非常优雅的解决方案。

【问题讨论】:

    标签: javascript ajax polymer polymer-2.x


    【解决方案1】:

    正如您所怀疑的,iron-request 已构建用于发送单个 HTTP 请求。我快速浏览了它的实现。如果请求的状态大于 0,send 方法实际上只会返回 null 并且不执行任何操作,如果您以前使用过它就会出现这种情况。

    虽然您可以为每个请求创建一个新的 iron-request 元素,但它并不优雅(正如您自己所说的)。相反,您可以使用iron-ajax。您可以在其documentation page 上找到一些说明。

    你的&lt;iron-request&gt;可以改写成这样。

    <iron-ajax id="xhr" url="https://httpbin.org/post" content-type="application/x-www-form-urlencoded" method="POST" body="[[inputdata]]" on-response="onXhrSuccess"></iron-ajax>
    

    你的保存功能,

    save() {
        this.$.xhr.generateRequest();
    }
    
    onXhrSuccess(event, request) {
        console.log("finished");
        poly.$.responsetext.innerHTML = event.detail.response;
    }
    

    【讨论】:

    • 谢谢。 &lt;iron-ajax&gt; 似乎提出了多个请求...但是在我提供的 plunker 链接中实现这些更改时我遇到了一些麻烦。你们中的一个人能提供一个完整的例子吗?这是我到目前为止所拥有的:plnkr.co/edit/nCZg3wch99WOtr8OdbLY?p=preview 文本字段似乎没有更新正在发送的数据。可能是数据绑定问题?
    • @chaseme 这是由与文本区域的数据绑定的不同问题引起的。您可以找到解释here 的解决方案。这是更新后的plunker
    • 完美。这样可行。我之前确实看到过关于 textarea 的解决方案,但我不知道它也适用于 Polymer 2.x。
    猜你喜欢
    • 1970-01-01
    • 2016-12-04
    • 2016-12-12
    • 1970-01-01
    • 2019-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-29
    相关资源
    最近更新 更多