jQueryPOST到PHP控制器返回了一个错误,但我仍然可以返回数据


jQuery POST to a PHP controller returns an error, but I still get data back

当我对一个PHP页面进行POST时,echo'ed数据仍然会返回给我,但jQueryAJAX说它不成功。为什么会这样?此外,一旦我取回数据,我如何才能真正"打印"出来?

我的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。

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

传递给success函数的变量不是数组。您只需要做一些类似$('#test').html(e); 的操作

您的代码有很多问题。

发送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访问您的数据。

不要使用卷曲

我不知道你为什么用卷发:)。暂时忘掉它,在echo您的JSON数据之前先使用header('Content-Type: application/json);