[object FormData]中的警报特定元素(用于测试)

时间:2012-12-01 19:24:19

标签: javascript ajax form-data

我正在尝试查看[object FormData]中包含的内容,特别是在名称应为Name的特定元素中。我想提醒它,检查内容是否正确,但这样做会返回undefined

    alert(fd['Name']);

我很确定我正在正确加载表单数据,所以我想知道问题是我是以错误的方式访问数据......

PS仅警告fd会返回[object FormData]

3 个答案:

答案 0 :(得分:13)

IvanZh告诉我这种方法对他不起作用,这促使我对HTML5 FormData对象进行了一些研究。事实证明,我完全错了(见下面的错误答案)。 FormData的所有数据都位于 native 代码中。这意味着浏览器以其实现语言处理表单字段和文件上载的数据。

引用MDN

  

注意:... FormData对象不是可字符串对象。如果   你想要字符串化提交的数据,使用以前的纯AJAX   例。还要注意,虽然在这个例子中有一些文件    字段,当您通过FormData API提交表单时   不需要同时使用FileReader API:文件是自动的   加载并上传。

没有办法在JavaScript中表示这些信息,所以我简单地将其序列化为JSON的天真建议将无效(这促使我想知道为什么这个答案首先被接受)。

根据您要实现的目标(例如,如果您只是尝试调试),简单地从返回相关JSON元数据的服务器端脚本中反弹此信息可能是可行的。例如,在PHP中,您可以将FormData发送到analyzeForm.php,这可以轻松访问您在相关请求超全局下附加到FormData的所有内容。该脚本将消化表单内容并返回相关信息,易于解析JSON。这是非常低效的,因此它可能不适合生产环境,但它是一些东西。

错误答案:

您可以尝试使用:

alert(JSON.stringify(fd));

查看fd

结构的文字表示

您也可以使用console.log,但这是一项非标准功能,并不保证在所有浏览器中都有。

答案 1 :(得分:4)

用户Spokey使用jsFiddle here让我接触到这个技术,它非常方便能够“看到”formData对象中的值,基本逻辑是:

function submitFormFunction() {
//create formData object
var myFormData = new FormData();
// get the values from some input fields
var myKey1 = $("input[name='my_field_one']").val();
var myKey2 = $("input[name='my_field_two']").val();
// append the values to the formData object, whilst also defining their key names
myFormData.append("my_field_one",myKey1);
myFormData.append("my_field_two",myKey2);
// mock implementation - in order to view what is being sent
var xhr = new XMLHttpRequest;
xhr.open('POST', '/echo/html/', true);
xhr.send(myFormData);
}

只需在Firebug中打开“网络”标签,您就可以看到这些值。

答案 2 :(得分:-2)

你应该这样做:

console.log(fd['Name']);

在大多数浏览器中,尤其是chrome,您可以打开开发人员工具(F12)并查看控制台。

您将获得一个很好的可扩展视图,您可以检查它。