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

时间:2013-02-01 11:57:10

标签: php ajax jquery

我正在尝试使用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会触发错误。

3 个答案:

答案 0 :(得分:5)

好。看过使用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代码行。只需打开Dev Tools或Firebug,然后运行代码,它就会停止并向您显示错误的确切位置。调试器查看变量的一些进一步工作,可能已经清楚问题是什么。

答案 1 :(得分:1)

php-answer是对的,它将文本'09:00'发送到javascript,但jQuery抛出错误:“Uncaught Error:语法错误,无法识别的表达式:unsupported pseudo:00”,可能使用ajax-answer作为元素的决定因素,也许是其他因素。显示你的js-code,因为它会抛出错误

答案 2 :(得分:1)

jQuery(data)被视为具有伪选择器'09:00'的元素的定义,并且说:00 - 不支持伪,因为存在伪选择器:first-child,hover,active和等等 在这个字符串中:

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

不需要,没有这个字符串脚本就行了。