通过POST PHP而不是Ajax版本发送JSON数据

时间:2017-12-30 00:39:56

标签: php json ajax curl

我必须创建一个JSON对象,该对象相当于使用此Ajax代码片段创建的JSON对象:

$.ajax({
    type    : "POST",
    url     : "?",
    dataType: "json",
    data    : "username=" + encodeURIComponent($('input[name="username"]').val()) + "&password=" + encodeURIComponent($('input[name="password"]').val()) + "&antiForgeryToken=d98188e0f56bafa75180591e38d189ee",
    success : function(json) {
        if(json.status == 'success') {
            window.parent.location.href = json.returnUrl;
            window.parent.$.fancybox.close();
        } else {
            $('#slfErrorAlert').show();
            $('.spispinner').hide();
            $maindiv.removeAttr("disabled");
            $maindiv.removeClass("instaclass31");
        }
    }
});
});

我只能使用PHP,这是我到目前为止使用SimpleTest中的SimpleBrowser库生成的:

$browser = new SimpleBrowser();
$str = '?username=aaa&password=bbb&antiForgeryToken=d98188e0f56bafa75180591e38d189ee';
$json = json_encode($str);
$browser->post($httpsPage, $json);

我指定我不必使用这个库及其方法,但是例如我知道这也可以使用cURL完成,虽然我不知道如何。
当我启动脚本时,我认为从POST服务器输出通用{"status":"error"} 我错过了什么?

根据@Andy使用json_encode更正语法:(仍然是相同的错误消息):

$data = array('username' => 'aaa', 'password' => 'bbb');
$json = json_encode($data);

2 个答案:

答案 0 :(得分:0)

根据#backpropagation L2_error = y - L2 的{​​{1}}文档页面,您必须绕过此方法的数组。您可以在此处找到更多详细信息:http://php.net/manual/en/function.json-encode.php

在你的情况下,你可能需要建立这样的东西:

PHP

答案 1 :(得分:0)

尝试使用curl:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $httpsPage);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'username='.rawurlencode('aaa').'&password='.rawurlencode('bbb').'&antiForgeryToken=d98188e0f56bafa75180591e38d189ee');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$server_output = curl_exec ($ch); 
curl_close ($ch);
print_r($server_output);

或者尝试使用您的代码而无需编码为json post vars:

$browser = new SimpleBrowser();
$str = '?username='.rawurlencode('aaa').'&password='.rawurlencode('bbb').'&antiForgeryToken=d98188e0f56bafa75180591e38d189ee';
$browser->post($httpsPage, $str);

响应将采用json格式,但是post vars我不认为它们应该是。从jQuery .ajax help:dataType(默认值:Intelligent Guess(xml,json,script或html))您希望从服务器返回的数据类型。