2013-09-27 19 views
0

這裏是我試過:jQuery的 - 阿賈克斯提交JSON數據GET

JS:

$.ajax({ 
    type: 'GET', 
    contentType: 'application/json; charset=UTF-8', 
    data: JSON.stringify({ data: 'bla' }), 
    dataType: 'json', 
    success: function(data) { 
     alert(data); 
    }, 
    error: function(data) { 
     alert('error: ' + data); 
    } 
}); 

PHP:

<?php 

    if ($_SERVER['REQUEST_METHOD'] == 'GET') 
    { 
     $data = json_decode(file_get_contents('php://input')); 

     echo json_encode($data); 
    } 

?> 

輸出:

null 

如果交換GETPOST,而不是它的工作原理就像一個魅力。 「爲什麼不直接使用POST?」,我使用POST來執行插入數據庫。我有一種暗示的感覺,可能是因爲它強制需要這種格式的GET數據:[email protected]&firstname=Bob&lastname=Mctest。我不知道爲什麼,因爲內容類型設置爲application/json,這有點令人困惑。只是爲了在我的最後一次編輯中添加一些內容,php://input是空的,換句話說,它不向它發送任何數據,但它仍然可以在終端使用curl GET的情況下正常工作。

當我運行使用它就像一個魅力和吐出沒有問題的數據即curl -v -X GET -H "Content-Type: application/json" -d '{"data":"bla"}' http://codes.local/test.php

我不知道多大的幫助,這將是,但我發現了JSON內容類型的終端的捲曲GET命令一個PHP小提琴網站,並粘貼示例代碼,以方便大家,這裏是鏈接:http://phpfiddle.org/main/code/u4b-xkh

非常感謝您的任何幫助。


編輯:修正了「應用/ JSON的」拼寫錯誤所指出的SilverBlade並更新了PHP小提琴鏈接(空輸出仍然存在,換句話說仍然沒有工作)。我應該在上面說明的問題是php://input實際上是空的,當通過jQuery發佈時沒有任何數據 - 與curl GET結合使用時沒有問題。


編輯2:我沒有使用IIS,感謝羅伯特丹尼羅(heh)指出了它。

回答

2

我的懷疑是準確的,問題的原因是jQuery $ .ajax/$。get在使用時強制查詢字符串即使您將內容類型設置爲JSON,GET也沒有任何意義,但我將不得不剖析手冊以找出原因。

以下是我的工作代碼,其中包含一個解決方法,該方法適用於curl GET和$ .ajax/$。get。

JS:

$.ajax({ 
    type: 'GET', 
    url: 'manage.php', 
    data: 'user=bla', 
    dataType: 'json', 
    success: function(data) { 
     // code here... 
    } 
}); 

PHP:

$get = !empty($_GET) ? json_decode(json_encode($_GET)) : json_decode(file_get_contents('php://input')); 
1

你的內容類型有一個咒語錯誤,

contentType: 'appllication/json; charset=UTF-8', 

應該

contentType: 'application/json; charset=UTF-8', 

其次,你可以與指定URL檢查。

+0

嗨SilverBlade感謝您的回覆。我修復了這個錯字,並更新了PHP小提琴和其他所有內容,對於那裏的尷尬錯誤感到抱歉,我正在複製粘貼我的代碼的簡化版本,因此更容易通過。僅供參考,如果將網址發佈到自己,則無需指定URL。 – adamj

0

使用$ .get & $ .post而不是$ .ajax,生活會容易得多。像這樣:

$.get(request_url, { param: value }, function(data){ 
    // callback here 
}, 'json') 
+0

我必須檢查一下,我幾乎沒有觸及$ .get,我不確定它是否有contentType。我今天晚些時候會給你一個鏡頭。謝謝回覆。 – adamj

+0

最後一個參數'json'代表contentType'application/json'。 jQuery支持$ .get和$ .post中最常用的contentType。檢查API文檔,並獲得樂趣:) –

1

SilverBlade可能已經發現您的問題,但XHR和PHP之間仍存在通信問題。 PHP需要返回正確的頭文件,否則使用jQuery解釋可能會發生奇怪的事情。

嘗試:

header('Content-type:application/json');

+0

在那裏切碎(這是在最新的PHP小提琴)沒有骰子以及=( – adamj

0

我不明白你是什麼意思,你不能使用POST,因爲你使用POST插入數據庫。
POST 發送數據到服務器&可能是爲什麼服務器忽略GET中的數據 - 因爲它不需要處理GET中的數據。
如果你已經使用POST,那麼你可以擴展它 - 就像你的json可以有2個屬性 - 動作&數據。
Action = [dbInsert,dbSomethingElse,fileWrite等]
數據將是原始數據。
你會採取不同的代碼路徑基於行動
我不知道你使用的是什麼Web服務器,但IIS忽略GET中的數據 - 無論'application/json; charset = UTF-8','application/x-www-form-urlencoded'等。

+0

感謝您的答覆。我做RESTful行爲(http://en.wikipedia .org/wiki/Representational_state_transfer),並將POST重新設置爲插入,並將PUT作爲更新。我沒有使用IIS我會在頂端文章中查看,因爲這也是非常重要的因素。 – adamj