jQuery认为每个PHP响应都有staus 0

jQuery sees every PHP response as having staus 0

本文关键字:staus 响应 PHP jQuery      更新时间:2023-09-26

我一直在尝试让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-Ptimeout一起使用,以验证是否确实调用了 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});
  • 上面例子的演示在这里
  • 您可以在维基百科中找到更多信息

希望这有帮助。快乐编码。:)