通过ajax post从js向php发送数据 - 错误

时间:2015-09-05 01:36:13

标签: javascript php jquery ajax

我正在尝试使用ajax将数据从我的js文件传递到php文件(如下所示)。

我检查了php错误日志,看到我通过POST发送的数据无法被php识别(获取“试图获取非对象属性”错误)。

当我参考$ json-> func时,如果在最后一行失败,我也发布了我的php代码。

我做得对吗?我已经看到了一些使用jquery的post函数的例子,但是我喜欢ajax方式的成功和错误,所以我一直在努力坚持下去。

感谢帮助:)

JS:

 $.ajax({
            type: "POST",
            url: url,
            dataType : "json",
            data: {func:'getSummId' ,summName: summonerName},
            success: function(json){
                           //bla bla bla
           }
            error: function(){
                           //bla bla bla
           }

PHP:

    <?php
        header("Content-Type: application/json", true);
        header("Access-Control-Allow-Origin: *");
        $client_data = file_get_contents("php://input");
        $json = json_decode($client_data);
        switch ($json->func) {
        ...

2 个答案:

答案 0 :(得分:2)

method: "POST"指的是返回的数据,而不是您发送数据的方式。 所以你的数据将在dataType全局变量中,并且使用php://输入在这种情况下不适用于json_decode

所以你可以使用

$_POST

或者您可以尝试在jQuery ajax请求中设置内容类型选项(虽然我从未尝试过这样做,因此您必须对其进行测试)

$func = $_POST['func'];
$summName = $_POST['summName'];

未设置$.ajax({ type: "POST", url: url, contentType: "application/json", dataType : "json", data: {func:'getSummId' ,summName: summonerName}, 时,默认为

contentType

PHP自动将该类型的请求解析为$ _GET / $ _ POST / $ _ REQUEST全局变量。 PHP本身并不知道如何自动解析发送给它的应用程序/ json请求。因此,当想要以json的形式发送请求数据时,您必须自己阅读application/x-www-form-urlencoded; charset=UTF-8

答案 1 :(得分:0)

尝试将public static string RandomString(Random r) { string s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; var sb = new StringBuilder(); int cnt = r.Next(5, 33); for (int i = 1; i <= cnt; i++) { int idx = r.Next(0, s.Length); sb.Append(s.Substring(idx, 1)); } return sb.ToString(); } private void timer2_Tick(object sender, EventArgs e) { var r = new Random(); string useragent = RandomString(r); timer2.Stop(); timer2.Interval = 1; timer2.Start(); } private void timer1_Tick(object sender, EventArgs e) { Navigate("http://example.org",useragent,null); } 更改为type: "POST"