jQuery POST到PHP控制器返回错误,但我仍然得到数据

时间:2012-03-08 22:07:53

标签: php jquery ajax json

当我将POST发送到PHP页面时,echo的数据仍会回复给我,但jQuery AJAX表示它并不成功。为什么会这样?而且,一旦我收回数据,我怎样才能真正“打印”出数据呢?

我的PHP如下:

<?php 
$userEmail = $_POST['username'];
$userPassword = $_POST['password'];
//Login Function
$data = array("username" => $userEmail, $userPassword => "password");                                                                    
$data_string = json_encode($data);                                                
$ch = curl_init('http://*****/****/**/Login');                                                                      
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                                                                     
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                                                                 
curl_setopt($ch, CURLOPT_VERBOSE, 1 );                                                                  
curl_setopt($ch, CURLOPT_HTTPHEADER, array(                                                                          
    'Content-Type: application/json')                                                                       
);                                                                                                                   
$result = curl_exec($ch);
$obj = json_decode($result);
echo $obj;
echo '<br /><br />';
echo '<b>Each array and objects in table:</b> <br />';
echo '<hr>';
echo '<br />';
echo '<table border="1">';
echo '<tr><td>Medical Entity:</td><td>Date:</td><td>Type:</td><td>ID:</td></tr>';
foreach ($obj as $key => $value) {
    echo '<tr>';
        echo '<td>' . $value->date . '</td>';
        echo '<td>' . $value->Name . '</td>';
        echo '<td>' . $value->dealType . '</td>';
        echo '<td>' . $value->id . '</td>';
    echo '</tr>';
}
echo '</table>';
?>

jQuery AJAX如下:

<div id="test">
Testing Stuff!
</div>

<script>
$(document).ready(function() {
$('#submit').click(function () {
var username = '***@****.com';
var password = 'password';
var data = '&username=' +  username + '&password=' + password;

        $.ajax({  
            type: "POST",  
            url: "/****/data.php",  
            data: data,  
            dataType: "json",  
            success: function(e){   
                for(var i=0;i<e.length;i++){
                    document.write(e[i]);
                }
            },  
            error: function(e){   
                for(var i=0;i<e.length;i++){
                    $('#test').html(e[i]);
                } 
        });  

  //cancel the submit button default behaviours
        return false;
    }); 

});
</script>

我的最终目标是通过AJAX将我从PHP页面获取的数据写入我的HTML页面上的DIV。

2 个答案:

答案 0 :(得分:1)

您正在使用dataType: json调用您的php函数,这意味着jQuery期望返回JSON结果。你的php文件正在返回HTML。删除dataType:JSON设置。

传递给success函数的变量不是数组。您只需要执行$('#test').html(e);

之类的操作

答案 1 :(得分:0)

您的代码存在很多问题。

发送JSON

我知道你正在尝试发送JSON,但是你做错了。首先,您尝试使用json_decode($php_object)获取JSON数据,但您应该使用json_encode($php_object),因为您必须将PHP对象编码为JSON表示法(这是一个字符串)。然后你将HTML附加到这个JSON,这是没有意义的。你应该这样做:

$json_output = json_encode(
  array(
    "result" => $result,
    "html" => $some_html_you_generated_before
  )
)

然后在Javascript中,您只需使用data.resultdata.html访问您的数据。

不要使用curl

我不知道你为什么使用curl :)。暂时忘记它并在{J}数据header('Content-Type: application/json);之前使用echo