2014-04-01 212 views
3

我正在嘗試Redis並希望構建一個簡單的前端/後端設置來測試它並進行實踐。前端是HTML/Javascript/JQuery,後端是PHP/Apache/Redis。基本上,我想發送一個發佈請求到後端,並收到一個響應,然後我將顯示在Web控制檯上。發送請求,我用JQuery:Ajax POST請求變成GET請求

var data = $("#login_form :input").serializeArray(); 

var username = data[0]['value']; 
var password = data[1]['value']; 

$.ajax({ 
     type: "POST", 
     url: "http://localhost/Convo/user.php?jsoncallback=%3F", 
     dataType: "json", 
     cache: false, 
     data: { username: username, password: password, method: "create" }, 
     success: function(text){console.log("awesome");} 
     }); 

我在Firefox上使用Firebug來查看真正發生了什麼。在Firebug中,我看到一個GET請求被解僱,而不是POST。連接到url的jsoncallback字符串可能是原因,但沒有它,我根本得不到迴應。作爲一個便箋,我期待json迴應。這是我的PHP代碼:

error_reporting(E_ALL); 
ini_set('display_errors', '1'); 
require 'Predis/Autoloader.php'; 
Predis\Autoloader::register(); 

$body = array(); 
$head = array(); 

$redis = new Predis\Client(array(
     'scheme' => 'tcp', 
     'host' => '127.0.1.1', 
     'port' => 6379, 
)); 

if(!$redis) 
{ 
    $body['status'] = "fail"; 
    $body['message'] = "unable to connect to database"; 
    $head['body'] = $body; 

    header('Content-type: application/json'); 
    echo json_encode($head); 
    exit; 
} 
else 
{ 
    $body['status'] = "success"; 
    $body['message'] = "connected to database!"; 
    $head['body'] = $body; 
    $jsoncallback = $_POST['jsoncallback']; 

    header('Content-Type: application/json'); 
    echo $jsoncallback . '(' . json_encode($head) . ')'; 
    exit; 
} 

的jsoncallback東西是得到迴應的唯一途徑,但我怎麼成功啓動一個真正的POST請求沒有它?

+0

你爲什麼要設置獲取參數?在您的腳本中似乎不需要 –

+0

無法使用jsonp數據類型進行POST。 –

+0

根據我在另一個問題中找到的答案,從PHP返回的數據必須由通過get發送的jsoncallback「包裝」。沒有所有的jsoncallback的東西,請求被解僱,但沒有任何返回 –

回答

4

這可能是因爲您使用jsonp作爲dataType,jsonp不支持POST請求。

編輯:嘗試發送jsoncallback參數,與其他參數:

$.ajax({ 
     type: "POST", 
     url: "http://localhost/Convo/user.php", 
     dataType: "json", 
     cache: false, 
     data: { username: username, password: password, method: "create", jsoncallback: "%3F" }, 
     success: function(text){console.log("awesome");} 
     }); 
+0

我將dataType更改爲「json」,並刪除了jsoncallback的東西。該帖子被解僱但沒有任何返回。我甚至寫了一個PHP腳本中的文件,以確保它被執行並且是。 –

+0

您正在發送一個「?」作爲參數jsoncallback?如果是這樣,請嘗試%3F而不是「?」 –

+0

在jsoncallback =%3F中,因爲我剛剛嘗試過,仍然沒有迴應 –

0

這樣看來,加入這行來我的PHP文件解決了該問題:

header('Access-Control-Allow-Origin: *'); 

我明白,這不是最好的練習,但我是在我的繩索的盡頭。這是一個跨網站禁止,阻止了回覆到我的前端。我也知道有一種方法可以對此進行過濾,以便只有某些網站才能發出請求。