2017-07-30 100 views
0

我想通過jQuery ajax函數發送一個數據到PHP腳本並接收響應 - 成功或失敗。我使用的代碼:從jQuery發佈JSON到PHP

的JavaScript:

$.ajax({ 
    type: 'POST', 
    url: 'foo.php', 
    dataType: 'json', 
    data: { 
     foo: 'foo' 
    }, 
    success: function (response) { 
     ... 
    }, 
    error: function (response) { 
     ... 
    } 
}); 

PHP:

<?php 
header("Content-Type: text/json"); 
echo $_POST['foo'] 
?> 

然而,這總是返回錯誤,因爲header("Content-Type: text/json");

這裏做錯了什麼?

+0

您可以嘗試'application/json'來代替。 – RichGoldMD

+0

@RichGoldMD嘗試過'header(「Content-Type:application/json」);' - 同樣的錯誤。 – Oleg

+0

那麼,錯誤文本是什麼? –

回答

1

這將正確處理服務器端的錯誤。

<?php 
    if(isset($_POST['foo']){ 
     header('Content-Type: application/json'); 

     $foo = array(
      "foo" => $_POST['foo']; 
     ); 
     echo json_encode($foo); 
    } else { 
     header('HTTP/1.0 400 Bad Request'); 
    } 
?> 
+0

這是最好的答案。我實際上也可以這樣做:'http_response_code(404);'。 – Oleg

+0

您確實可以選擇返回哪個錯誤代碼,但404會指示客戶端使用的是錯誤的url。 https://en.wikipedia.org/wiki/List_of_HTTP_status_codes – Ecstabis

1

要獲得JSON響應包括鍵進行適當的JSON

<?php 
    header("Content-Type: text/json"); 
    $foo = isset($_POST['foo']) ? $_POST['foo'] : ""; 
    echo json_encode(["foo"=>$foo ]) ; 
    ?> 

正如你已經定義的dataType爲JSON在阿賈克斯你可以排除上述包頭。

+0

一個字符串已經是一個__valid__ json。 –

1

如果使用application/json應該

$.ajax({ 
     url: '/foo.php', 
     method: 'post', 
     contentType: 'application/json', 
     data: JSON.stringify({ foo: 'foo' }), 
     success: function(data) { 


     } 
    }) 

$.ajax({ 
     type: 'post' 
     url: '/foo.php', 
     data: { "foo": "foo" }, 
     dataType: "json", 
     success: function(data) { 

     } 
}) 
1

在評論正如許多人所指出的,正確的MIME類型的JSON數據是 「應用/ JSON」 - 那不是你的問題。問題是你沒有返回JSON,你只是迴應變量的內容。如果變量只是一個值,它至少需要一個鍵({「key」:「value」})才能正確轉換爲JSON對象。

要進行轉換,在它是表示有效JSON的對象之後,您會回顯json_encode($ yourvar)。