无法弄清楚为什么php脚本在$ .ajax调用失败

这是我的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文件位于同一文件夹中。

这是表格:

 

我还validation了“searchZipCode”有一个值。

每次我运行搜索时,我都会从ajax调用的错误部分获得警报

查询失败,php脚本返回此响应:[object 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。

[答案 – 信用hek2mgl]正如hek2mgl在我们疯狂的讨论中解释的那样,我提交了两次表单,因为ajax调用是在表单按钮的click事件中。

解决这个问题的方法是将ajax调用从click事件移出到它自己的函数中,在我的客户端validation之后,调用ajax函数并添加“return false;” 在函数调用之后。

$ .ajax错误回调定义如下:

类型:函数(jqXHR jqXHR,String textStatus,String errorThrown)

你已经转储了整个jqXHR对象。 与success函数不同,respone文本本身不是错误回调的参数。 要检索响应文本(如果有),请使用以下命令:

 error: function(xhr) { var response = xhr.responseText; console.log(response); var statusMessage = xhr.status + ' ' + xhr.statusText; var message = 'Query failed, php script returned this status: '; var message = message + statusMessage + ' response: ' + response; alert(message); }