2012-12-01 24 views
6

我试图查看[object FormData]中包含哪些内容,特别是在名称应该是Name的特定元素中。我想提醒它,检查的内容是正确的,但这样做会返回undefined[对象FormData]中的警报特定元素(用于测试)

alert(fd['Name']); 

我敢肯定,我正确加载表格数据,所以我在想,如果这个问题是我正在访问的方式是错误的数据...

PS报警仅fd返回[object FormData]

+0

显示更多代码,以及您的HTML。 –

回答

10

IvanZh告诉我,这种方法对他不起作用,这促使我对HTML5 FormData对象进行一些研究。事实证明,我对此完全错了(请参阅下面的旧错误答案)。 FormData的所有数据都在原生代码中。这意味着浏览器使用其实现语言处理表单域和文件上传的数据。

报价MDN

注:...... FORMDATA对象不是stringifiable对象。如果 要将所提交的数据串联起来,请使用先前的纯AJAX 示例。还要注意的是,虽然在这个例子中有一些文件 的字段,当你通过FormData API提交表单时,你做的 也不需要使用FileReader API:文件自动加载并上传 。

没有办法在JavaScript中表示这些信息,所以我的天真建议简单地将它作为JSON序列化将不起作用(这提示我想知道为什么首先接受这个答案)。

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

老不正确的答案:

你可以尝试使用:

alert(JSON.stringify(fd)); 

查看的fd结构的文本表示。

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

+0

我不能在FF和Chrome中重复你的方法,我只是得到空对象:'{}' – IvanZh

+0

@IvanZh这是因为你的对象是空的,一个空对象序列化为'{}',所以 –

+0

可能是我做的不正确?请看看这个,或者在浏览器控制台中运行: var fd = new FormData; fd.append('test',123); alert(JSON .stringify(fd))'' – IvanZh

-2

你应该这样做:

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

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

你会得到一个很好的展开你的对象的视图,你可以检查它。

+0

它显示undefined :( –

2

用户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中打开,您将能够看到值。