4

这是我的 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;” 在函数调用之后。

4

1 回答 1

6

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

类型:函数(jqXHR jqXHR,字符串 textStatus,字符串 errorThrown )

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

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);
}
于 2013-01-21T21:30:22.433 回答