jQuery表单和Json问题



大家好,我正在使用jQuery表单提交一个多部分表单。

这是我的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"
    });
});

这样,响应就是[object object]。但当我删除这两行时:

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

反应是:

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

我的问题是:我真的必须删除这两行吗?如何使用Json获得responseText的值?

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

要打印对象,您需要这样的东西:

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

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

要获取值,只需像使用任何其他Javascript对象一样使用responseText;尽管你可能想给它一个不同的名字,让它更清楚地知道它到底是什么。

不,您没有,但警报框无法显示JSON对象。试着改为使用Console.log(responseText),并在浏览器的developertools中检查结果。[object object]是一个对象文字

如果删除这些行,则会在JavaScript中得到string'{"key1":"val1","key2":"va2","key3":"val3"}')(因为它使用response作为带有text/text mime tipe的文件),如果不删除,则会得到Object{"key1":"val1","key2":"va2","key3":"val3"}),所以我认为不应该删除它们,例如,如果您希望循环使用这些行。顺便说一句,当您提醒对象时,JavaScript会将对象转换为字符串(始终为'[Object object]')。

不要从脚本中删除以下代码并添加以下代码,您将正确获得警报

dataType: "json",
contentType: "application/json; charset=utf-8"
var htmlstr;
for(var i in responsetext)
{
htmlstr += i +"="+responsetext[i]+"n";
}
alert(htmlstr);

最新更新