【问题标题】:Cannot read property 'value' of undefined" on dojo/request/iframe post无法读取 dojo/request/iframe 帖子上未定义的属性“值”
【发布时间】:2014-05-20 02:56:27
【问题描述】:

我有一个图片上传功能,可以用这样的图片上传表单:

iframe(url, {
    form: dom.byId("myform"),
    handleAs: "json",
    timeout: 5000,
    method: "POST"
}).then(function () {
    console.log("Success");
}, function (Err) {
    console.log(Err);
});

在服务器端我得到图像,但在客户端我得到 TypeError: Cannot read property 'value' of undefined↵ at I [as handleResponse] (http://ajax.googleapis.com/ajax/libs/dojo/1.9.2/dojo/request/iframe.js:9:114)↵ at r (http://ajax.googleapis.com/ajax/libs/dojo/1.9.2/dojo/dojo.js:206:81)"。我没有返回值!我不明白是什么导致了错误! 请帮忙!

【问题讨论】:

  • 您的链接已损坏。此错误在您的代码中发生在哪里?将他们指向iframe.js 并不是很有帮助...
  • 我得到 Err = "Cannot read property 'value' of undefined↵ at I [as handleResponse] (ajax.googleapis.com/ajax/libs/dojo/1.9.2/dojo/request/…)↵ at r (ajax.googleapis.com/ajax/libs/dojo/1.9.2/dojo/dojo.js:206:81)"!链接坏了不是我的错!这是错误的价值!
  • 以后,请同时发布您的相关服务器代码,特别是因为您使用 asp.net-mvc-4 标记了这篇文章。找到问题的原因需要更长的时间,因为我无法确定您返回的响应是什么。

标签: javascript asp.net-mvc-4 iframe dojo image-upload


【解决方案1】:

来自Dojo Reference Guide

重要提示:如果您的有效负载不是 html 或 xml(例如文本、JSON),则服务器响应需要包含内容 在<textarea> 标签中。这是因为这是唯一的跨浏览器 此提供者知道内容何时成功的方式 加载。因此,服务器响应应如下所示:

<html>
  <body>
    <textarea>
      payload
    </textarea>
  </body>
</html>

解决此问题所需要做的就是将 JSON 响应包装在 &lt;textarea&gt; 标记中。原因在iframe.js,从第300行开始:

if(handleAs === 'xml'){
    ...
}else{
    // 'json' and 'javascript' and 'text'
    response.text = doc.getElementsByTagName('textarea')[0].value; // text
}

因此,您会在此处收到错误消息:“无法读取undefined 的属性'值'。” Dojo 在您的响应中找不到&lt;textarea&gt; 元素,因此doc.getElementsByTagName('textarea') 返回一个空数组。空数组的第 0 个元素 []undefined,取消引用会引发此错误。

【讨论】:

  • 非常感谢,你拯救了我的一天!
  • handleResponse 甚至在从服务器接收到响应之前就被调用(响应包含在 textarea 中),因此出现上述错误。请注意,这是间歇性的,并且仅在第一个文件上传时发生(如果确实如此)。之后工作正常...
  • @HiteshBajaj 是的,Dojo iframe 类中有一个错误。几天前我发现了这一点。这是因为 iframe 的 onload 处理程序有时会由于加载默认的空白.html 页面而提前触发。您可以通过覆盖或替换 dojo/_base/window win.global 对象上的 dojo_request_iframe_onload() 方法来绕过它。在 iframe.doc(iframe._frame).location.href 中查找 blank.html,如果看到则忽略该事件,否则调用原始 dojo_request_iframe_onload() 方法。或者,您可以尝试通过手动调用 iframe.create() 来预加载 iframe。
猜你喜欢
  • 1970-01-01
  • 2017-09-24
  • 1970-01-01
  • 1970-01-01
  • 2019-10-27
  • 2021-06-29
  • 2019-01-17
  • 1970-01-01
  • 2020-06-16
相关资源
最近更新 更多