Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery $.post可以正常工作,但$.ajax给出了一个错误:“";不应直接访问此脚本&引用;_Jquery_Callback - Fatal编程技术网

Jquery $.post可以正常工作,但$.ajax给出了一个错误:“";不应直接访问此脚本&引用;

Jquery $.post可以正常工作,但$.ajax给出了一个错误:“";不应直接访问此脚本&引用;,jquery,callback,Jquery,Callback,我正在使用jQuery库编写一个autosuggest/autocomplete脚本。输入ajax时,通过php文件从数据库中获取数据,并向用户提供建议 问题1: 现在,由于$.post请求工作正常: /*this works*/ $.post("autosuggest.php", {queryString: ""+inputString+""}, function(data){ $('#suggestions').fadeIn(); $('#s

我正在使用jQuery库编写一个autosuggest/autocomplete脚本。输入ajax时,通过php文件从数据库中获取数据,并向用户提供建议

问题1: 现在,由于$.post请求工作正常:

/*this works*/
$.post("autosuggest.php", {queryString: ""+inputString+""}, function(data){ 
            $('#suggestions').fadeIn();
            $('#suggestionsList').html(data);
            });
$.ajax替代方案给了我以下错误:不应该直接访问此脚本

以下是输出错误的代码:

    $.ajax({
                type: "POST",
                url: "autosuggest.php",
                data: {data: ""+inputString+""},
                success: callback
            });
            function callback(data) {
                $('#suggestions').fadeIn();
                $('#suggestionsList').html(data);
            };
问题2: $.post还有一个奇怪的地方,回调函数需要在paranthese中声明:

//this works
$.post( url, params, function callback(data) {
$("div").html(data);
}
如果我在外部声明回调函数,它将无法工作:

//this won't work
$.post( url, params, callback(data)); 
function callback(data)
{
$("div").html(data);
}

关于您的第一点:错误可能是由于您以不同的方式命名参数:
queryString
vs
data
。除此之外,两个调用完全相同,事实上,
$.post
内部使用
$.ajax
进行调用


关于你的第二点:这并不奇怪,你在做两件不同的事情。在第一个示例中,将函数传递给
$.post
。在第二种情况下,调用
回调
,并将其返回值传递给
$.post
(即
未定义
)。您必须执行以下操作:
$.post(url、参数、回调)

无法回答问题1,可能是服务器应用程序在告诉该消息

在发布2中,按如下方式操作(从$.post定义中删除“数据”):


仅供参考:
{queryString:+inputString+“”}
是毫无意义的。您可以使用
{queryString:inputString}
感谢Felix,这是一条非常有用的注释。事实上,很明显,数据未定义,回调使用未定义的值调用php。但是在$.ajax中,alternative的工作方式不同吗?@Tomalak,它没有区别:)。我试图弄明白为什么$.ajax不起作用。我没有说它会有什么不同。这就是为什么它毫无意义非常聪明/简单的解决方案。我用params参数传递回调,并在返回后用数据显示它。对于问题1,我认为如果我使用相同的名称,它不起作用。数据是php处理后显示的变量。问题是您的
$.post
调用将以
queryString=foobar
$的形式发送数据。ajax
data=foobar
的形式发送数据。PHP脚本可能期望出现
queryString
,如果不出现,则抛出错误。只需使用:
数据:{queryString:inputString}
试试。
//this won't work
$.post( url, params, callback ); 
function callback(data)
{
    $("div").html(data);
}