由于url错误,Ajax请求失败


Ajax request fails due to wrong url

我在使用Ajax时遇到了一个奇怪的问题。我有一个名为Main.html的页面,可在本地url 'http://localhost/Main.html',这是使用Bootstrap风格。

当页面加载时,jQuery检查一个特定的文件是否存在,然后在Bootstrap面板中加载一个特定的html;它可以是用于注册/登录服务的HTML,也可以是直接的主页;主页是从home .html文件加载的,可以在'http://localhost/Home.html'找到。

这个主页有一些元素,其中最主要的是一个带有一些进一步选项的搜索栏;发生的事情是,当用户在栏中插入内容,选择适当的选项并单击"搜索"按钮时,一个名为Search()的jQuery函数,它在页面Home.html的脚本中,使用上面插入的数据向页面'Home.php'发出Ajax请求。

ajax请求是:

function search()
{
    $.ajax({
        type: 'POST',
        url: 'Home.php',
        data: {query: $('#query').val(), searchtype: $('#searchtype').val(), second: $('#second').val()} ,
        success: function (result) {
            alert('success');
            $('#mainPanel').empty();
            $('#mainPanel').append(result);
        },
        error: function (jqXHR) {
            alert('fail');
        }
    });
}

我期望的是直接在面板中加载答案;问题是Ajax请求没有调用正确的url,因此失败;发生的事情是,它不调用'http://localhost/Home.php?query=Something&searchtype=some&second=blabla',但它调用'http://localhost/Main.html?query=Something&searchtype=some&second=blabla': ',它将请求应用到打开页面的url,而不是我想要的那个。

我习惯了Ajax调用,我经常使用Ajax调用php文件,这是第一次发生在我身上。


更多信息:

1)我试图将请求中的url更改为'http://localhost/Home.php'和'/Home.php',但没有任何改变。

2)文件'Home.php'包含一些行连接到MySQL数据库(成功),然后这行:

$query=$_POST['query'];
$type=$_POST['searchtype'];
$second=$_POST['second'];

然后对这些变量进行一些操作;在大量的切换之后,总是会有一个'echo'调用。

3)我使用Chrome及其检查器:控制台输出中没有显示任何内容,但从"网络"选项卡中,我理解对"Home.php"的调用失败:查询的输出是

注意:未定义的索引:查询C:'xampp'htdocs'Home.php在第11行

注意:未定义的索引:搜索类型在C:'xampp'htdocs'Home.php第12行

注意:未定义的索引:第二在C:'xampp'htdocs'Home.php第13行

因此,似乎在请求期间没有传递变量。此外,以下是请求的标头:

一般

请求URL:http://localhost/Home.php

请求头

显示临时标题

接受:/

内容类型:应用程序/x-www-form-urlencoded;

utf - 8字符集=

来源:http://localhost

推荐人:http://localhost/Main.html

User-Agent:Mozilla/5.0 (Windows NT 6.1;WOW64) AppleWebKit/537.36

(KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36

X-Requested-With: XMLHttpRequest

表单数据

查询:达尼第二:名称

所以参数'searchtype'似乎不被接受…但这是相当奇怪的,考虑到它出现在url

经过长时间的讨论,我们想出了办法。

你必须在你的按钮上附加一个监听器,而不是使用html onclick<button id="search"></button>并防止表单提交的默认事件$('#search').on('click', function(event) {event.preventDefault(); search();});这一行必须写在你的search()方法声明下面