如何修复jQuery AJAX的“不支持的伪”错误


How to fix “unsupported pseudo” error of jQuery AJAX?

我正在尝试使用jQuery Ajax从php页面获取响应。一切正常,直到我尝试爆炸一个数组并将其元素组合起来以获得时间09:00

控制台说,Uncaught Error: Syntax error, unrecognized expression: unsupported pseudo: 00,没有显示任何内容。

我的代码是,

$starttimeArr= explode(",",$comma_separated_starttime);// explodes 09,00,00
$endtimeArr= explode(",",$comma_separated_endtime);// explodes 17,00,00
echo $starttime= $starttimeArr[0].":".$starttimeArr[1];// combine to get 09:00. The line pop up the error
$endtime= $endtimeArr[0].":".$endtimeArr[1];// combines to get 17:00

我是如何克服这个错误的?任何帮助将不胜感激。

我的 Ajax 代码是

jQuery("#_dob").change(function() {
                    jQuery.ajax({
                        url: "<?php echo $this->getUrl('deliverybydatepro/index/index') ?>",
                        data: "checkIn="+jQuery(this).val()+"&type=calendar",
                        type: "GET",
                        dataType: "html",
                        success: function(data) {
                           var $response=jQuery(data);
                           jQuery("#div1").html(data);
                        }
                    });
    });

响应页面有一个下拉列表,其中包含一个选项"09:00"jQuery-1.8.0会触发错误。

好的。看到带有JS代码的编辑问题后,问题很明显:

var $response=jQuery(data);

此行是导致错误的原因。

data变量是来自 AJAX 请求的响应字符串。正如预期的那样,这包含字符串"09:00"。

这意味着您的代码等效于调用 jQuery('09:00')

jQuery将尝试将其解释为CSS选择器。它将看到09并尝试查找具有该名称的元素。它当然不会找到一个,但它不会抱怨这一点。但是,它随后会看到:00并假设这是一个伪选择器(如:before:first-child等)。当然:00不是一个有效的伪选择器,jQuery会抱怨这一点。所以这就是错误的来源。

那怎么办呢?答案很简单,真的。

你用这条线来设置一个名为 $response 的变量,但你永远不会使用该变量;你继续使用 data 变量。因此,实际上抛出错误的整行是完全不必要的。如果您的 PHP 输出 JSON 或 XML 数据,您可能需要这样的行,但如果它是纯字符串,则不需要。

因此,解决方案是完全删除该行。

希望有帮助。

顺便说一句

,为了帮助您下次,通过使用浏览器中的调试器来找出导致问题的 JS 代码行会相当容易。只需打开开发工具或Firebug,然后运行代码,它就会停止并显示错误的确切位置。使用调试器查看变量进行一些进一步的工作,可能会清楚问题是什么。

php-answer 是对的,它将文本 '09:00' 发送到 javascript ,但 jQuery 抛出了一个错误:"未捕获错误:语法错误,无法识别的表达式:不支持伪:00",也许 ajax-answer 被用作元素的行列式,也许是其他的。显示您的 js 代码,因为它会抛出错误

jQuery(data) 被当作带有伪选择器 '09:00' 的元素的定义,并说 :00 - 不支持的伪,因为有伪选择器:第一个孩子、悬停、活动等。在此字符串中:

var $response=jQuery(data);
jQuery("#div1").html(data);
the string "var $response=jQuery(data);

不需要,没有这个字符串脚本就可以工作。