【问题标题】:jQuery JSON not properly processing a PHP scriptjQuery JSON 没有正确处理 PHP 脚本
【发布时间】:2011-10-22 16:23:52
【问题描述】:

由于某种原因,我无法让我的 JSON 脚本正确处理 if...else 语句。它会在 100% 的时间内处理 else 语句,即使值匹配也会跳过 if 部分。但是,当被静态 Html 表单调用时,PHP 脚本可以完美处理。有任何想法吗? jQuery 脚本如下:

$("#action_button").click(function() {
    var username = $("#username").val();
    var password = $("#password").val();
    var dataString = '&username=' + username + '&password=' + password;
    if(username=='' || password=='') {
        $('#success').fadeOut(400).hide();
        $('#error').fadeOut(400).show();
    } else {
        $.ajax({
        type: "POST",
        dataType: "JSON",
        url: "processing/logsig.php",
        data: dataString,
        json: {session_state: true},
        success: function(data){
        if(data.session_state == true) { // true means user is logged in.
            $("#main1").fadeOut(400);
        } else if(data.session_state == false) { // false means user is being registered.
            $("#main1").hide();
            $('#main1').load('views/dashboard.php').fadeIn(400);
        }
      }
   });
  }
});

PHP 脚本:

<?php
header('Content-type:application/json');
session_start();
include("enc.php");
mysqlcon();

$email = mysql_real_escape_string(strip_tags($_POST["username"]));
$password = sha1($_POST["password"]);
$sql = "SELECT * FROM users WHERE username = '{$email}' AND password = '{$password}'";
$result = mysql_query($sql); // or exit("ERROR: " . mysql_error() . "<br>IN QUERY: " . $sql);

if (mysql_num_rows($result) > 0) {
    $row = mysql_fetch_array($result);
    $_SESSION["userid"] = $row['user_pid'];
    $json1 = json_encode(array('session_state' => true));
    echo $json1;
} else {
    $userid_generator = uniqid(rand(), false);
    mysql_query("INSERT INTO users (user_pid, email, password, datetime_registered, is_leader) VALUES ('$userid_generator', '{$email}', '{$password}', NOW(), 'no')");
    $id = mysql_insert_id();
        $leaders = mysql_query("SELECT * FROM users WHERE is_leader LIKE '%yes%'");
        while($rows = mysql_fetch_array($leaders)) {
            if ($rows['is_leader'] == 'yes') {
                $leader_id = $rows['user_pid'];
                mysql_query("INSERT IGNORE INTO friends (node1id, node2id, friends_since, friend_type)
                VALUES('$leader_id', '$userid_generator', NOW(), 'full')");
                }
    $_SESSION["userid"] = $userid_generator;
        }
    $json2 = json_encode(array('session_state' => false));
    echo $json2;
    }
?>

【问题讨论】:

  • 您检查过从 Firebug 中的 PHP 文件获取的 JSON 数据吗?
  • 是的,每次都返回false。
  • 哪个“如果”有问题?在 jQ 或 PHP 中是哪个? if(username=='' || password=='') 还是 if(data.session_state) 之一?
  • 我对 jQuery 和 Javascript 还是很陌生,我只知道它与 Javascript 端有关,因为当静态 Html 表单调用 PHP 时,它可以完美运行。但我很确定它与 if(username=='' || password=='') 有关,因为表单没有正确处理返回的 JSON……无论输入什么,它都会返回 false .
  • 您发送到 PHP 文件的 POST 参数是否正确?使用 Firebug 进行检查?

标签: php jquery mysql json


【解决方案1】:

在 firebug 中查看您的站点,POST 参数未正确发送。我看到了

password    undefined
username    undefined

经过进一步检查,您的输入似乎都没有 ID 属性,并且未被找到

var username = $("#username").val();
var password = $("#password").val();

这与 JSON 或 PHP 无关。请费心执行基本的调试步骤。如果需要,请在每一行粘贴alert()s。

【讨论】:

  • 我最近开始使用 firebug 和 chrome 调试工具,我还在习惯它们。我认为这与用户名和密码字段有关。谢啦。对混淆感到抱歉。我在调试时需要考虑很多代码。
猜你喜欢
  • 1970-01-01
  • 2012-10-12
  • 2013-04-07
  • 1970-01-01
  • 2014-10-27
  • 2013-03-08
  • 2015-04-12
  • 1970-01-01
  • 2020-04-13
相关资源
最近更新 更多