2011-09-17 38 views
15

我寫了使用jQuery和AJAX今天的腳本,我也得到了一些錯誤......jQuery的AJAX - 意外的令牌+ parsererror

腳本:

function changeAdmin(id) { 
$(document).ready(function() { 
    $('#ta-modarea-'+id).fadeOut('fast'); 
    $('#ta-m-loading-'+id).fadeIn('fast'); 

    $.ajax({ 
     type: 'POST', 
     url: 'ajax_utf.php?a=changeteamadmin', 
     dataType: 'json', 
     data: { 
      admin : $('#admin-id-'+id).val() 
     }, 
     success: function(data) { 
      $('#ta-m-loading-'+id).fadeOut('fast'); 
      $('#ta-modarea-'+id).text(data.msg).fadeIn('fast'); 
     }, 
     error: function(jqXHR, textStatus, errorThrown) { 
      $('#ta-m-loading-'+id).fadeOut('fast'); 
      $('#ta-modarea-'+id).text('HTTP Error: '+errorThrown+' | Error Message: '+textStatus).fadeIn('fast'); 
     } 
    }); 

    return false; 
}); 
} 

運行結束後,我得到這個錯誤消息:HTTP Error: SyntaxError: Unexpected token < | Error Message: parsererror

你能幫我嗎,我該怎麼辦?

+0

如果你直接調用ajax_utf.php?A = changeteamadmin你的JavaScript之外,會發生什麼? –

+0

它顯示一條消息,我坐在PHP文件中。 – Skylineman

+1

你可以檢查返回的json是否有效嗎?你可以在www.jsonlint.com查詢 – Rafay

回答

3

嘗試

alert(jqXHR.responseText); 

在誤差函數

+0

它說: Skylineman

+1

我認爲ajax_utf.php返回的是html代碼,而不是json。你是否在php腳本中使用json_encode()? –

+0

是的,有一個「echo json_encode($ return);」在它的結尾 – Skylineman

7

你需要通過PHP發送application/json頭,像這樣:

header('Content-type: application/json'); 

這是因爲jQuery的發送和接收報頭(application/json, text/javascript) ,這是由jqXHR觸發的parseerror的原因。

+0

你有什麼想法如何在** asp.net **中解決這個問題? –

+1

爲了解決這個問題,ASP.NET(webforms)可以爲你的方法添加'[ScriptMethod(ResponseFormat = ResponseFormat.Json)]'屬性。 – user1477388

0

這可能是一個與PHP關聯/數組數組和Javascript對象不匹配的問題。

試試這個:

$data = new Array(); 
$data['test'][] = "Row 1"; 
$data['test'][] = "Row 2"; 
echo json_encode($json, JSON_FORCE_OBJECT); 

這應該強制JSON編碼器編碼總是對象而不是數字陣列和可能解決問題。

2

如果您已嘗試設置標頭內容類型並仍然收到錯誤。這是我的期望,服務器正在回答您的服務器端代碼的故障。通常當給出調試消息時,它是純HTML而不是JSON,因此是意外的令牌。

調試的最快捷方式是設置HTML的DataType而不是JSON,這樣您就可以看到服務器的任何輸出,而不僅僅是JSON格式的數據。

一旦你看到了你的服務器端代碼產生的錯誤並修復它,你可以返回到JSON的DataType。

1

的contentType: 「應用/ JSON的;字符集= UTF-8」,下面

1

try代碼,但如果你收到這樣的錯誤 「意外令牌<」,你需要檢查你的PHP文件 - 「ajax_utf。 php「並檢查瀏覽器(Chrome)View-> Developer-> Developer Tools,Network選項卡 - > XHR返回的內容。

enter image description here

  $.ajax({ 
       type: 'post', 
       url: postLink, 
       dataType: 'json', 
       data: postData, 

      beforeSend: function (x) { 
       if (x && x.overrideMimeType) { 
        x.overrideMimeType('application/json;charset=UTF-8'); 
       } 
      }, 
      success: function (result) { 
       //console.log(result); 
      }, 
      error: function (xhr, ajaxOptions, thrownError) { 
       console.log(arguments); 
      } 
     });