2011-09-17 11 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

あなたのjavascriptの外に直接ajax_utf.php?A = changeteamadminを呼び出した場合はどうなりますか? –

+0

私はPHPファイルに何があったかを示すメッセージを表示します。 – Skylineman

+1

返されたjsonが有効かどうか確認できますか?あなたはwww.jsonlint.comでチェックすることができます – Rafay

答えて

3

あなたはこのように、PHP経由application/jsonヘッダを送信する必要が

+0

それは言う: Skylineman

+1

私はajax_utf.phpがjsonではなくhtmlコードを返すと思います。あなたはPHPスクリプトでjson_encode()を使用しますか? –

+0

はい、そこには "echo json_encode($ return);"という末尾に – Skylineman

7

あなたの誤差関数に

alert(jqXHR.responseText); 

をお試しください:

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

jQueryのAcceptヘッダー(application/json, text/javascript)を送信しているためだことこれはjqXHRによってトリガーされたparseerrorの原因です。

+0

あなたは何か考えていますか? ** asp.net **でこの問題を解決するには? –

+1

これを解決するにはASP.NET(webforms)をメソッドに '[ScriptMethod(ResponseFormat = ResponseFormat.Json)]属性を追加することができます。 – user1477388

0

PHPアソシエーティブ/数値配列とJavascriptオブジェクトのmissmatchingに問題がある可能性があります。

は、これを試してください

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

これは、常にオブジェクトの代わりに数値配列にエンコードするためのJSONエンコーダを強制する必要があり、問題を解決することができます。

2

ヘッダーのコンテンツタイプの設定を試したが、まだエラーが発生している場合。サーバーがサーバーサイドのコードからのフォールトを返信しているのが私の予想です。通常、デバッグ・メッセージが与えられると、それはJSONではなく純粋なHTMLにあり、したがって予期しないトークンです。

これをデバッグする最も簡単な方法は、JSONの代わりにHTMLのDataTypeを設定して、JSON形式のデータだけでなく、サーバーからの出力を確認できるようにすることです。

サーバー側コードで生成されたエラーを確認して修正したら、JSONのデータ型に戻ることができます。

1

のcontentType: "アプリケーション/ jsonの;のcharset = UTF-8"、下の

1

てみコードがありますが、 "予期しないトークン<" のようなエラーが表示された場合、あなたはあなたのPHPファイルをチェックする必要がある - 「ajax_utfを。 php "を開き、ブラウザ(Chrome)の表示 - >開発 - >開発ツール、ネットワークタブ - > 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); 
      } 
     }); 
関連する問題