1

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

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

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

4

5 回答 5

3

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

要打印对象,您将需要以下内容:

function showResponse(responseObj){
   $.each(responseObj,function(i,v) {
         alert(i+' = '+v);
   });
}
于 2012-07-31T10:54:30.440 回答
2

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

要获取这些值,只需responseText像使用任何其他 Javascript 对象一样使用;尽管您可能想给它一个不同的名称,以使其更清楚它实际上是什么。

于 2012-07-31T10:47:35.297 回答
0

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

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

var htmlstr;
for(var i in responsetext)
{
htmlstr += i +"="+responsetext[i]+"\n";
}
alert(htmlstr);
于 2012-07-31T10:55:26.247 回答
0

如果你删除这些行,那么你会在 JavaScript 中得到string( '{"key1":"val1","key2":"va2","key3":"val3"}')(因为它使用响应作为具有text/textmime 提示的文件),如果你不这样做,那么你会得到Object( {"key1":"val1","key2":"va2","key3":"val3"}),所以我认为你不应该删除它们,如果你想通过这个循环例如。顺便说一句,当您警告对象时,JavaScript 将对象转换为字符串(始终'[Object object]')。

于 2012-07-31T10:47:01.707 回答
0

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

于 2012-07-31T10:47:13.957 回答