jQuery认为每个PHP响应都有staus 0
jQuery sees every PHP response as having staus 0
我一直在尝试让javascript检查MySQL数据库中是否存在用户。
为此,我使用jQuery将用户详细信息发布到检查MySQL数据库的PHP脚本中。
jQuery POST 成功地将数据传递给 PHP 脚本。我已经检查过这个:
- 通过让PHP脚本给我发电子邮件说它已经得到了数据。
- 通过使用火虫跟踪呼叫
- 通过使用Wireshark跟踪数据包交换
但是,jQuery决心相信每次从PHP脚本获得响应时,状态都是0。
在Firebug trace和wireshark trace中,PHP 脚本的 HTML 响应状态始终为"200 OK"。
我已经尝试了许多想法(由许多遇到类似问题的人提出),例如强制编码为 json 并将 jQuery POST 调用中的数据类型设置为"json",例如在 PHP 脚本中短暂休眠,例如使用 GET 而不是 POST。
我已经将我的HTML,javascript和PHP简化到最低限度,但我仍然无法让jQuery决定响应的状态不是0。
我现在得到的:
网页代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org /TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<SCRIPT SRC="Templates/nop_shopping_cart/jquery-1.7.2.js"></SCRIPT>
<script type="text/javascript">
function checkUser()
{
alert("clicked");
jQuery.post( 'http://solfacats.com/dsadmin/valUser2.php', {email: "test", password: "test"}, function(data) { alert("returned"+data)}, "html" );
}
</SCRIPT>
<body>
<button onclick="Javascript: checkUser();"> "test" </button>
</body>
</html>
PHP代码:
<?php
echo "test";
?>
注意 - 为了跟踪正在发生的事情,我在 jquery-1.7.2.js 的 done() 函数中使用了对 alert() 的调用。其中一个警报弹出传递给 done() 的变量状态的值。这始终显示变量状态的值为零。
另外,请注意 - 如果我通过在函数的早期添加行"status=200"来破解done()函数,那么 jQuery.post 中的回调函数将被调用,但它认为传递给它的数据变量的值为空。
我已经在IE,Firefox和Safari上尝试过这个,并在它们上遇到了同样的问题。
有没有人有一些很好的指示,告诉我应该从这里开始让jQuery看到PHP响应成功,并成功从响应中提取数据?
不能说你是如何调试你的代码的,但对我来说,当我尝试使用你的代码时,显然相同的来源策略阻止你对不同域的 AJAX 请求。
您可以将JSON-P
与timeout
一起使用,以验证是否确实调用了 AJAX。如果请求超时,则某些网络问题正在杀死它。可以通过以下代码对其进行跟踪:
function checkUser() {
alert("clicked");
var email = "test";
var password= "test";
var url = "http://solfacats.com/dsadmin/valUser2.php";
$.ajax({
url: url,
type: "post",
data: "email="+ email + "&password=" + password,
dataType: 'jsonp', //it helps you in cross-domain data transfer
crossDomain : true,
timeout : 2500, /* it is in milliseconds (i have greater timeout
as my net is very slow, generally a timeout of
500 milliseconds will be sufficient)*/
complete : function(xhr, responseText, thrownError) {
if(xhr.status == "200") {
alert(responseText); //yes response came
}
else{
alert("No response"); //no response came
}
}
});
}
通过这种方式,您将能够得到回应。但它会在控制台中抛出 JS 错误。要使用 JSON-P 传递数据,您必须在服务器端生成格式正确的数据。一个有效的响应示例是:
parseResponse({"Name": "Foo", "Id" : 1234, "Rank": 7});
- 上面例子的演示在这里
- 您可以在维基百科中找到更多信息
希望这有帮助。快乐编码。:)
- 如何将getJson的响应保存在全局变量中
- 如何使用Spring MVC将Facebook返回的响应数据保存在Java类中
- 使用angularjs向浏览器发送servlet响应(下载功能)
- MockJax没有在JavaScript应用程序中发送对我AJAX请求的响应
- 不再使用innerHTML进行AJAX响应.(代码未得到响应)
- 为什么可以't我使用了AJAX响应的一部分
- 响应动画手风琴不工作
- 如何从SeleniumWebdriver获取异步Javascript响应
- Ajax调用在Firefox中不会自动响应
- 可以在响应时隐藏iphone上的“播放”按钮以进行视频播放
- 由于响应中不存在“Access Control Allow Origin”标头,跨域请求停止工作
- 如何在 JavaScript 和 HTML 中更改对输入框的提示响应
- IIS动态HTTP响应标头
- 预期响应包含一个对象,但在angular js中得到一个数组错误
- Ajax响应转换
- 使Intro.js工具提示响应
- 存储$http如何从$http函数(Angularjs)外部获取可访问变量中的响应
- 将高图饼图中的文本居中显示为响应
- 如何使用 AJAX 从 JSON 响应中获取 staus 值
- jQuery认为每个PHP响应都有staus 0