尝试传递具有特定格式的String

时间:2014-11-21 21:59:00

标签: jquery json

我知道我想要传递的格式,它应该是这样的:

[{"blah.png"},{"blah2.png"}]

但是我回来了:

["blah.png","blah2.png"]

这是我的代码:

var filesObj = [];

$('#fileList .files .fileName').each(function () {
    var name = $(this).text();
    filesObj.push(name);
});

console.log(filesObj);
$.ajax({
    type: "POST",
    url: "/dat/Controller",
    data: JSON.stringify(filesObj),
    dataType: "json"
});

非常感谢任何帮助。谢谢!

3 个答案:

答案 0 :(得分:0)

[{"blah.png"},{"blah2.png"}] 

不是有效的JavaScript或JSON。如果你想使用对象而不是字符串,你的循环看起来更像是

$('#fileList .files .fileName').each(function () {
    var name = $(this).text();
    filesObj.push({"name": name});
});

此处,每个对象都有一个键," name",以及一个与$(this).text();对应的值

答案 1 :(得分:0)

你可以这样做:

var filesObj = {files:[]}; //initialize as javascript object

$('#fileList .files .fileName').each(function () {
    var name = $(this).text();
    filesObj.files.push(name);
});

console.log(filesObj);
$.ajax({
    type: "POST",
    url: "/FileUpload/ImportCommit",
    data: JSON.stringify(filesObj),
    dataType: "json"
});

答案 2 :(得分:0)

对任何对未来感兴趣的人......

我修复此问题的方式不是字符串格式,而是更改AJAX调用。

我设置了这样的对象:

var filesObj = [];

$('#fileList .files .fileName').each(function () {
    var name = $(this).text();
    filesObj.push(name);
});

这会发布一个字符串,如:["delete-icon.png","something.exe"]

诀窍是将我的AJAX修改为POST,如下所示:

$.ajax({
    type: "POST",
    url: "/dat/Controller",
    data: JSON.stringify(filesObj),
    contentType: "application/json",
    traditional: true,
    success: function (result) {
        console.log("Success: " + result);
    },
    error: function (result) {
        console.log("Error: " + result);
    }
});

dataType更改为contentType并添加traditional: true似乎对我有用。这个(我相信)的原因是因为我发布的实际数据在技术上不是JSON。我添加traditional: true只是为了安全起见。