2012-10-16 35 views
1

我一直在努力整整一天,我似乎无法通过使用$ .ajax函数发送通过JSON对象到PHP文件的权利。我最终发现它是正确的,但现在它拒绝解码。

// JQuery的文件

  var user = 
     { 
      "email" : document.getElementById('email1').value, 
      "password" : document.getElementById('pwd1').value, 
      "fname" : document.getElementById('firstname').value, 
      "lname" : document.getElementById('lastname').value, 
      "gender" : Validator.getGender(), 
      "dob" : document.getElementById('dob').value 
     }; 
     JSON.stringify(user); 

      user = {json:user}; 

      $.ajax({ 
        type: "POST", 
        url: "register.php", 
        dataType: 'json', 
        data: user, 
        success: function(result) 
        {  

         alert("It worked :D"); 
         alert(result); 
        }, 
        failure: function() 
        { 

         alert('whoops'); 
        } 
       }); 

// PHP文件

<?php 
    $json = $_REQUEST['json']; 
    $json = stripslashes($json); 

    $jsonobj = json_decode($json); 

    $fname = $jsonobj->fname; 
    $lname = $jsonobj->lname; 
    $password = $jsonobj->password; 
    $email = $jsonobj->email; 
    $gender = $jsonobj->gender; 
    $dob = $jsonobj->dob; 
    echo $gender; 

?>

我做的东西完全傻了?我只是回应了性别变量,但实际上我会用它来将它输入到数据库中。

感谢提前:)

编辑:

会如何,如果我的PHP文件看起来像这样,将它的工作:

session_start(); 
$db = mysql_connect("localhost", "root"); 
if(!$db) 
{ 
    die("DB connection failed: " . mysql_error()); 
} 

$db_select = mysql_select_db("tinyspace", $db); 
if(!$db_select) 
{ 
    die("DB connection failed: " . mysql_error()); 
} 

$json_string = $_REQUEST["json"]; 
$jsonobj = json_decode($_REQUEST["json"]); 
$fname = $jsonobj -> fname; 
$lname = $jsonobj -> lname; 
$pwd = $jsonobj -> password; 
$email = $jsonobj -> email; 
$gender = $jsonobj -> gender; 
$dob = $jsonobj -> dob; 

$sql("INSERT INTO tinyspace.users (email, password, firstname, lastname, gender, dob) VALUES ('$email','$password','$fname', '$lname','$gender','$dob')"); 

if (!mysql_query($sql,$db)) 
{ 
    die('Error: ' . mysql_error()); 
} 

mysql_close($db); 
+0

数据类型参数定义的典型e数据,你期待回来,而不是你发送到服务器的类型,只是删除,让JQuery分析服务器响应 – sdespont

回答

0

的问题是,你正在使用datatype =json并试图以回应result.So它将无法正常工作它将只接受json数据

你需要删除这个

dataType: 'json', 

或回声成才这样

$gender=array(); 
$gender['gender']=$jsonobj->gender 
echo json_encode($gender); 

您还没有创建JSON

使用本

var user = 
     { 
      "email" : document.getElementById('email1').value, 
      "password" : document.getElementById('pwd1').value, 
      "fname" : document.getElementById('firstname').value, 
      "lname" : document.getElementById('lastname').value, 
      "gender" : Validator.getGender(), 
      "dob" : document.getElementById('dob').value 
     }; 
     var userjson= JSON.stringify(user); 

      user = {json:userjson}; 

data:{'json' :userjson} 
+0

但在例如,我不想返回任何东西,只是想添加数据到数据库,我怎么会让它知道它是成功的? – Crossman

+0

是的,只是不指定数据类型; '$ .ajax()'足以确定类型本身。 (这就是我通常使用'$ .post()'的原因,99%的情况下它使用正确的默认值)。 – sgroves

+0

@Crossman你可以使用'dataType:'html''或者你可以使用适当的编码serverside。 – StaticVariable