无法在dojo / request / iframe帖子上读取未定义的属性“值”

时间:2014-04-07 17:53:41

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

我有一个图片上传功能,可以使用以下图像上传表单:

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

在服务器端,我得到图像,但在客户端,我得到TypeError:无法读取属性' value' ofundefined↵在I [as handleResponse](http://ajax.googleapis.com/ajax/libs/dojo/1.9.2/dojo/request/iframe.js:9:114)↵在r(http://ajax.googleapis.com/ajax/libs/dojo/1.9.2/dojo/dojo.js:206:81)"。我没有退货价值!我没有得到导致错误的原因! 请帮忙!

1 个答案:

答案 0 :(得分:4)

来自 Dojo Reference Guide

  

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

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

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

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

因此,您可以在此处获得错误,内容为“无法读取undefined的属性'值'。” Dojo在您的响应中找不到<textarea>元素,因此doc.getElementsByTagName('textarea')返回一个空数组。空数组的第0个元素[]undefined,并且取消引用它将引发此错误。