2

我一直在尝试获取 javascript 来检查用户是否存在于 MySQL 数据库中。

为此,我使用 jQuery 将用户详细信息发布到检查 MySQL 数据库的 PHP 脚本中。

jQuery POST 成功地将数据传递给 PHP 脚本。我已经检查过了:

  • 通过让 PHP 脚本向我发送电子邮件,告诉我它已经获得了数据。
  • 通过使用 Firebug 跟踪调用
  • 通过使用 Wireshark 跟踪数据包交换

但是,jQuery 坚信每次从 PHP 脚本获得响应时,状态都是 0。

在 firebug 跟踪和 wireshark 跟踪中,来自 PHP 脚本的 HTML 响应中的状态始终为“200 OK”。

我尝试了许多想法(很多遇到类似问题的人建议),比如强制编码为 json 并将 jQuery POST 调用中的数据类型设置为“json”,比如在PHP 脚本,例如使用 GET 而不是 POST。

我已经将我的 HTML、javascript 和 PHP 简化到了最低限度,但我仍然无法让 jQuery 确定响应的状态不是 0。

我现在得到的:

HTML 代码:

<!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 响应成功并成功地从响应中提取数据的一些好的指示?

4

1 回答 1

0

不能说你是如何调试你的代码的,但对我来说,当我尝试使用你的代码时,显然相同的来源策略会阻止你对不同域的 AJAX 请求。

您可以使用JSON-Pwith atimeout来验证是否真的调用了 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});

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

于 2012-04-22T11:05:54.267 回答