2016-06-24 68 views
1

我有以下的Ajax請求:切換到POST

// 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: Unexpected end of JSON input

請求負載仍然q=testrequest&pid=1

我還需要改變什麼,才能從GET切換到POST

+0

使用'json_decode()'在$ _ POST查詢 – ixe

+0

@ ixe:你能告訴我,究竟在哪裏? – user1170330

+0

@ user1170330刪除'contentType'和'dataType'設置 – postrel

回答

1

在您的Ajax函數中,您需要省略已在Ajax調用中定義的內容類型。刪除行「contentType:」application/json;字符集= 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); 
    } 
}); 

應該以後的工作只是罰款 乾杯

0

的$就的作品,但我建議使用$不用彷徨或$。員額代替!。當您使用$不用彷徨 要carrefull你的網址,瀏覽器有卡拉科特限制(約2000 caracters)。

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

您可以創建一個函數與此代碼,然後讓Web服務的一個簡單的通話。

這裏是jQuery的doucmentation:

$不用彷徨https://api.jquery.com/jquery.get/

$ .POST https://api.jquery.com/jquery.post/

希望這有助於;)