从GET切换到POST

时间:2016-06-24 07:58:20

标签: javascript php jquery mysql ajax

我有以下Ajax请求:

// JavaScript
function myFunc(pid) {
    $.ajax({
        type : "GET",
        url : "testback.php",
        contentType : "application/json; charset=utf-8",
        dataType : "json",
        data : {
            q : "testrequest",
            pid : pid
        },
        success : function(data) {
            console.log(data)
        },
        error : function(jqXHR, status, error) {
            console.log(status, error);
        }
    });
}

// PHP
require_once ("dbconnect.php");
if (isset ( $_GET ['q'] )) {
    if ($_GET ['q'] == "testrequest") {
        $pid = $_GET ['pid'];

        $query = "SELECT * FROM `tab1` WHERE `pid` = " . $pid;

        $json = array ();
        if ($result = $link->query ( $query )) {
            while ( $row = $result->fetch_assoc () ) {
                array_push ( $json, $row );
            }
        }

        header ( "Content-type: application/json; charset=utf-8" );
        die ( json_encode ( $json ) );
        exit ();
    }
    die ();
}

它向我的MySQL数据库发送请求并返回预期的输出。

但是,我现在想切换到POST,而不是GET 当我用POST交换GET时:

// JavaScript
function myFunc(pid) {
    $.ajax({
        type : "POST", // POST
        url : "testback.php",
        contentType : "application/json; charset=utf-8",
        dataType : "json",
        data : {
            q : "testrequest",
            pid : pid
        },
        success : function(data) {
            console.log(data)
        },
        error : function(jqXHR, status, error) {
            console.log(status, error);
        }
    });
}

// PHP
require_once ("dbconnect.php");
if (isset ( $_POST ['q'] )) { // POST
    if ($_POST ['q'] == "testrequest") { // POST
        $pid = $_POST ['pid']; // POST

        $query = "SELECT * FROM `tab1` WHERE `pid` = " . $pid;

        $json = array ();
        if ($result = $link->query ( $query )) {
            while ( $row = $result->fetch_assoc () ) {
                array_push ( $json, $row );
            }
        }

        header ( "Content-type: application/json; charset=utf-8" );
        die ( json_encode ( $json ) );
        exit ();
    }
    die ();
}

我在控制台中收到以下错误:

  

parsererror SyntaxError:JSON输入的意外结束

请求有效负载仍为q=testrequest&pid=1

我需要更改哪些内容才能从GET切换到POST

2 个答案:

答案 0 :(得分:1)

在Ajax函数中,您需要省略已在Ajax调用中定义的内容类型。删除行“contentType:”application / json; charset = utf-8“如下所示:

$.ajax({
    type : "GET", // Or POST
    url : "testback.php",
    contentType : "application/json; charset=utf-8", // REMOVE THIS LINE!!
    dataType : "json",
    data : {
        q   : "testrequest",
        pid : pid
    },
    success : function(data) {
        console.log(data)
    },
    error : function(jqXHR, status, error) {
        console.log(status, error);
    }
});

之后应该可以正常工作! 干杯!

答案 1 :(得分:0)

$ .ajax有效,但我建议改用$ .get或$ .post。 当你使用$ .get时,对你的网址充满信心,浏览器有一些特征限制(约2000个字符)。

if (urlGet.length < 2000) {  
  // GET less than 2000 caractères use $.GET
  $.get(urlGet, function () {

  }).done(function (data) {
    //OK do stuff with data returned
  }).fail(function () {
    //err
  });
} else {
  //Use $.POST params : { name: "John", age: "25" }
  $.post(urlPost, { name: "John", age: "25" }, function () {

  }).done(function () {
    //ok
  }).fail(function () {
    //fail
  });
}

您可以使用此代码创建一个函数,然后只需调用WebServices。

这是jQuery doucmentation:

$。获取https://api.jquery.com/jquery.get/

$ .P发https://api.jquery.com/jquery.post/

希望这个帮助;)