在 firebug 中发现 JQuery 语法错误,但在我的代码中没有

Posted

技术标签:

【中文标题】在 firebug 中发现 JQuery 语法错误,但在我的代码中没有【英文标题】:JQuery syntax error found in firebug but not in my code 【发布时间】:2012-11-22 23:54:17 【问题描述】:

php 页面中,我有一个下拉列表,它触发 jQuery 更改功能并使用 AJAX 执行 POST 以填充页面中的第二个下拉列表。

这一切都应该很简单,但是 Firebug 会为 '?' 抛出一个语法错误。在运行时出现在我的代码中,而实际上并不在我的代码中。

这是我的 javascript 代码:

$(document).ready(function() 
    $('#taglist').change(function()
        $.ajax(
            type: "POST",
            url: "../includes/ajax.php",
            data: "taglist=" + $(this).find("option:selected").attr('value'),
            dataType: 'json',
            success: function(response, textStatus, jqXHR) 
                $("#catlist").html(response.catlist);
            ,
            error: function (xhr, textStatus, errorThrown) 
                $("#catlist").html(xhr.responseText);
            
        );​
    );
);

以下是在ajax.php中执行的PHP代码:

if(isset($_POST['taglist']))
    $catlist = '<select name="cat_id[]" size="5" multiple id="cat_id[]">';
    $catlist .= fillselecteditmultiple(0, 0, $_POST['taglist']);
    $catlist .= '</select>';

    echo json_encode(array("status"=>"success", "catlist" => $catlist));

fillselecteditmultiple() 输出填充的选项,突出显示应该预先选择的选项。它工作正常,因为我在其他页面中使用没有问题。为了确保函数本身没有抛出错误,我什至尝试更改函数以输出一个简单的 $catlist='abc' 字符串作为响应,但仍然是相同的错误。

奇怪的是,Firebug 在 javascript 代码的最后 2 行抛出一个错误,就像您在所附图片中看到的那样:

可能是什么原因导致“?”出现在我的代码中?

【问题讨论】:

您使用的是什么编辑器(dreamweaver、aptana、notepad++ 等)尝试将整个代码复制并粘贴到新文件中,看看是否有帮助。过去,我曾遇到过 Dreamweaver 在我的代码中添加有趣内容的问题,Aptana 将我从这个(以及许多其他问题)中解救了出来 当一个程序不知道如何表示一个 unicode 代码点时,它会在一个正方形内打印一个问号(我想你以前见过这个),或者如果它不能,一个简单的问题标记。一个意外的问号总是让开发人员怀疑编码。 谢谢。我会牢记在心! @StasGrin:请将您的评论放在答案中,以便我将其标记为已接受的答案,谢谢。 嘿,@Áxel 回答得更好:) p.s.好的,我发了。 【参考方案1】:

我觉得你那边可能有空格..去掉)之后的空格;​

【讨论】:

空间与此问题无关 有时空格被粘贴为特殊字符【参考方案2】:

您在 javascript 代码中发送此数据,

data: "tag=" + $(this).find("option:selected").attr('value')

但是在 php 文件中你尝试获取 $_POST['taglist'],

变量名不一样。

尝试更改数据:“taglist=....”或 $_POST['tag']。

【讨论】:

正确,在我的实际代码中,两个变量是相同的,但是通过各种测试和调试工作,我在这里粘贴了错误的代码。感谢您指出,我会在原帖中更改。【参考方案3】:

逐步调试代码。首先将else 语句放入您的ajax.php 文件并检查执行的位置。如果它进入if 语句,则在每一行上放置一个die() 函数以检查错误来自何处。您的代码中的一个可能错误是您在 ajax 函数中发送tag,而您收到的是$_POST['taglist']#taglist触发这个ajax函数,它的值是不贴出来的。仅发布您在 data 属性中提供的值。所以从

改变你的 if 条件

来自

if(isset($_POST['taglist']))

if(isset($_POST['tag']))

这可能是原因。其他都不错。

【讨论】:

正确,在我的实际代码中,两个变量是相同的,但是通过各种测试和调试工作,我在这里粘贴了错误的代码。感谢您指出,我会在原帖中更改。【参考方案4】:

只需检查您的编码。当您在行尾看到“奇怪”符号时,这主要是由编码问题引起的。

此外,常见建议:

当程序不知道如何表示一个 unicode 代码点时,它 在正方形内打印一个问号(我想你已经看到了这个 之前),或者如果它不能,一个简单的问号。意外 问号总是让开发人员怀疑编码。 (c) 阿克塞尔

【讨论】:

非常感谢,就此事进行了一次很好的讨论。

以上是关于在 firebug 中发现 JQuery 语法错误,但在我的代码中没有的主要内容,如果未能解决你的问题,请参考以下文章

jQuery getJSON 的“无效标签”Firebug 错误

Firebug 已达到 Firebug 请求大小限制

无法在 Chrome 开发人员工具/Firebug 中调试 javascript 问题

Jquery Ajax 的响应不出现屏幕,一些在 Firebug 控制台中

为啥 Firebug 不为未定义的属性显示“未捕获的类型错误”?

javascript 语法错误,缺少“;”