2012-07-31 81 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);