从php cUrl返回的Ajax没有任何价值

时间:2017-02-07 05:56:05

标签: javascript php ajax

当我点击提交按钮时,会有一个ajax帖子请求。但是返回的json值只有“”。 <.p>启动.done()ajax时,甚至console.log(数据)也无法正常工作。

<form id="form" action="#">
    <input type="email" placeholder="email" id="account_name" name="account_name" value="email@test.com"> <br>
    <input type="text" placeholder="First Name" id="first_name"  name="first_name" value="volvo"><br>
    <input type="text" placeholder="Last Name" id="last_name"  name="last_name" value="volva"><br>
    <input type="submit" name="submit" id="btn"/>
</form>

    <script type="text/javascript">
        $(function(){
            var btn = $("#btn");
            var form = $("#form");
            var accName =$("#account_name").val();

            form.on("submit",function(evt){
                evt.preventDefault();
                var myReq = $.ajax({
                    method:"POST",
                    url:"create.php",
                    dataType: 'json',
                    data: "account_name="+accName
                });
                myReq.done(createAcct);
            });

            function createAcct(data){
                console.log(data);
                var a = JSON.parse(data);
                console.log(typeof a);

            }    
        });
    </script>

所以返回的json是响应选项卡中的这个{“ac”:“”}数组。 这是我的php curl

$ca = createAcct($_REQUEST['account_name']);

$data = ["ca"=>"$ca"];//should be the email
print json_encode($data);
echo $data;

function createAcct($email_account){
    $data = '{"account_name":"'.$email_account.'"}';
    $ch = curl_init();

    //Set cURL parameters to perform API Call
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_URL, "https://api.website.com/api/accounts/create");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_USERPWD, API_USER.':'.API_PASS);
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
    $statusCode = curl_getinfo($ch,CURLINFO_HTTP_CODE);

    $output = curl_exec($ch);
    $err = curl_error($ch);
    if ($statusCode == 204) {
        return $email_account;
        curl_close($ch);
    } else {
        curl_close($ch);
    }

}

2 个答案:

答案 0 :(得分:0)

首先你要改变

print json_encode($data);    
echo $data;

echo json_encode($data);

比使用像这样的ajax直接获得响应的更好方法

$.ajax({
    method:"POST",
    url:"call.php",
    dataType: 'json',
    data: "account_name="+accName
}).done(function(data) {
    createAcct(data);
});

现在,在 createAcct 功能中,您可以获得回复

function createAcct(data){
    console.log("f");
    console.log(data);
    console.log(data['ca']);
    console.log(typeof data);
}   

您还可以使用ajax成功替换已完成的功能

success : function(data) {
    createAcct(data);
}

答案 1 :(得分:0)

通过'Content-Length:'。 strlen($ data))