繁体   English   中英

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

[英]Send JSON data via POST PHP instead of Ajax version

我必须创建一个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,这是我到目前为止使用SimpleTestSimpleBrowser库生成的内容:

$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);

根据json_encodePHP文档页面,您必须将数组绕过此方法。 您可以在这里找到更多详细信息: http : //php.net/manual/en/function.json-encode.php

在您的情况下,您可能需要构建以下内容:

$reqData = array('user' => 'foo', 'eamil' => 'bar@baz');
// {"user":"foo","email":"bar@baz"}
json_encode($reData);

尝试卷曲:

$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变量进行编码:

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

响应将采用json格式,但我认为不应该使用post var。 jQuery .ajax帮助中 :dataType(默认值:Intelligent Guess(xml,json,脚本或html))您期望从服务器返回的数据类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM