15

我今天使用 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

你能帮我吗,我该怎么办?

4

6 回答 6

7

application/json您需要通过 PHP发送标头,如下所示:

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

那是因为 jQuery 发送了一个 Accept header ( application/json, text/javascript),这就是parseerror触发 by的原因jqXHR

于 2012-07-06T16:38:57.490 回答
3

尝试

 alert( jqXHR.responseText);

在你的错误函数中

于 2011-09-17T19:00:12.293 回答
2

如果您尝试设置标题内容类型但仍然收到错误消息。我期望服务器从您的服务器端代码中回复错误。通常,当给出调试消息时,它是纯 HTML 而不是 JSON,因此是意外的标记。

最快的调试方法是设置 HTML 的 DataType 而不是 JSON,这样您就可以看到来自服务器的任何输出,而不仅仅是 JSON 格式的数据。

一旦您看到服务器端代码产生的错误并修复它,您就可以返回为 JSON 的 DataType。

于 2013-07-01T12:03:53.870 回答
1

contentType: "应用程序/json; charset=utf-8",

于 2013-10-28T22:01:45.207 回答
1

尝试下面的代码,但如果您收到类似“Unexpected token <”的错误,您需要检查您的 php 文件 - “ajax_utf.php”并检查浏览器 (Chrome) View->Developer->Developer Tools, Network 中返回的内容选项卡-> 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);
            }
        });
于 2016-04-08T01:05:23.673 回答
0

这可能是 PHP 关联/数字数组和 Javascript 对象不匹配的问题。

尝试这个:

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

这应该迫使 json 编码器始终编码为对象而不是数字数组,并且可以解决问题。

于 2013-02-10T20:01:30.380 回答