今日、jQueryとAJAX=を使用してスクリプトを作成しましたが、エラーが発生します...
スクリプト:
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
手伝ってくれませんか?
次のようにPHPを介してapplication/json
ヘッダーを送信する必要があります。
header('Content-type: application/json');
これは、jQueryがAcceptヘッダー(application/json, text/javascript
)を送信するためです。これが、parseerror
によってトリガーされるjqXHR
の原因です。
試す
alert( jqXHR.responseText);
あなたのエラー関数で
ヘッダーのコンテンツタイプを設定してもエラーが発生する場合。サーバーがサーバー側のコードからのエラーで応答していると思います。通常、デバッグメッセージが与えられると、JSONではなく純粋なHTMLに含まれるため、予期しないトークンになります。
これをデバッグする最も簡単な方法は、JSON形式のデータだけでなく、サーバーからの出力を確認できるように、JSONではなくHTMLのDataTypeを設定することです。
サーバー側のコードによって生成されているエラーを確認して修正したら、DataTypeをJSONに戻すことができます。
以下のコードを試してください。「予期しないトークン<」のようなエラーが表示された場合は、phpファイルを確認する必要があります-「ajax_utf.php」とブラウザで返されるものを確認する(Chrome)表示->開発者->開発者ツール、ネットワークタブ-> XHR。
$.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);
}
});
contentType: "application/json; charset = utf-8"、
PHP連想/数値配列とJavaScriptオブジェクトの不一致の問題である可能性があります。
これを試して:
$data = new Array();
$data['test'][] = "Row 1";
$data['test'][] = "Row 2";
echo json_encode($json, JSON_FORCE_OBJECT);
これにより、jsonエンコーダーは数値配列ではなく常にオブジェクトにエンコードされ、問題が解決する可能性があります。