这是我的 jQuery 脚本:
$.ajax({
type: 'POST',
url: 'zipCodes.php',
data: searchZipCode,
cache: false,
success: function(response) {
alert ('response from db search: ' + response);
},
error: function(response) {
console.log(response);
alert('Query failed, php script returned this response: ' + response);
}
});
上面的脚本在表单所在的html文件的head标签中。php脚本与html文件在同一个文件夹中。
这是表格:
<form id="frmZipCodeSearch" action="">
<label for="txtZipCodeSearch">Enter a zip code</label>
<input type="text" id="txtZipCodeSearch" length="10" maxlength="5" />
<input type="submit" id="btnSubmitZipCodeSearch" />
</form>
我还验证了“searchZipCode”是有价值的。
每次我运行搜索时,我都会从 ajax 调用的错误部分收到警报,上面写着
查询失败,php 脚本返回此响应:[object Object]
这在控制台中显示:
对象 {readyState: 0, setRequestHeader: function, getAllResponseHeaders: function, getResponseHeader: function, overrideMimeType: function…}
我尝试将 php 脚本剥离为一个回声。我没有在服务器上的脚本文件夹中生成任何 php 错误日志。我所做的任何改变似乎都没有给我带来不同的结果。除了一个例外:
我得到不同结果的唯一一次是当我剥离 ajax 并将 php 脚本移动到带有表单的文件并执行“常规”html 表单 POST 方法时。那行得通。但是当 php 是不同的文件时,我不认为路径是错误的,因为我在控制台中没有得到“找不到文件”。
我到底在这里想念什么?
[附加信息] 为了响应 hek2mgl 的回答,我在错误响应中添加了 xhr 并在控制台中获得了更多信息:
Uncaught ReferenceError: xhr is not defined zipCodeSearch.html:57
$.ajax.error zipCodeSearch.html:57
l jquery-1.8.3.min.js:2
c.fireWith jquery-1.8.3.min.js:2
T jquery-1.8.3.min.js:2
r jquery-1.8.3.min.js:2
我正在使用的所有其他 jQuery 工作正常,但这是我自己第一次使用 v1.8.3。
[Answer - credit hek2mgl] 正如 hek2mgl 在我们疯狂的长时间讨论中解释的那样,我提交了两次表单,因为 ajax 调用是在表单按钮的单击事件中。
对此的解决方法是将 ajax 调用从 click 事件中移出到它自己的函数中,在我的客户端验证之后,调用 ajax 函数并添加“return false;” 在函数调用之后。