2012-07-31 51 views
1

美好的一天家伙,我使用jQuery形式提交多部分表单。jQuery形式和Json问题

这是我的PHP代码:

foreach($addedData as $key => $value) 
    $result[$key] = $value; 

echo json_encode($result); 

的Javascript:

function showResponse(responseText){ 
    alert(responseText); 
} 
$('button').click(function(){ 
    $("form").ajaxForm({ 
     success: showResponse, 
     clearForm: true, 
    dataType: "json", 
    contentType: "application/json; charset=utf-8" 
    }); 
}); 

这样,反应是[对象的对象。但是,当我删除了这两条线:

dataType: "json", 
contentType: "application/json; charset=utf-8" 

响应变成了:

{"key1":"val1","key2":"va2","key3":"val3"} 

我的问题是:难道我真的要删除这些两行呢?我怎样才能得到使用Json的responseText的值?

+1

如果你想返回一个可遍历的对象,'responseText'不是参数的最好名称。这是一个对象(jQuery自动解析它),而不是一个字符串。 – Utkanos 2012-07-31 10:48:14

回答

2

如果您指定dataType: 'json'那么您的success回调函数将传递JSON表示的对象,而不是JSON字符串。 jQuery隐式处理将responseText转换为对象,所以你不必为自己做JSON.parse(responseText)。如果响应不是有效的JSON,则success回调将不会执行;即使AJAX请求成功返回。

要获取值,只需使用responseText像任何其他Javascript对象;尽管你可能想给它一个不同的名称,以使它更清晰。

0

如果删除线,那么你得到string'{"key1":"val1","key2":"va2","key3":"val3"}')在JavaScript中(因为它使用的输入反应与text/text MIME TIPE文件),如果你没有,那么你得到Object{"key1":"val1","key2":"va2","key3":"val3"}),所以我觉得你不应该删除它们,如果你想循环虽然这个例子。顺便说一句,当你提醒一个对象的JavaScript转换对象字符串(总是'[Object object]')。

0

不,您不这样做,但警报框无法显示JSON对象。请尝试使用Console.log(responseText),并在浏览器中检查developertools中的结果。 [对象对象]是对象字面

3

通过让dataType:"json", ..告诉请求,您希望返回的项目是一个对象(如$.parseJSON(responseText);)。没有它,你会得到纯文本。

要打印您需要像这样的对象:

function showResponse(responseObj){ 
    $.each(responseObj,function(i,v) { 
     alert(i+' = '+v); 
    }); 
} 
0

不会从你的脚本删除下面的代码,并添加下面的代码,你会得到警告正确

dataType: "json", 
contentType: "application/json; charset=utf-8" 

var htmlstr; 
for(var i in responsetext) 
{ 
htmlstr += i +"="+responsetext[i]+"\n"; 
} 
alert(htmlstr);