2016-07-27 120 views
0

我曾經能夠很好地在NodeJS中完成jQuery AJAX請求,但是當我嘗試在PHP中做同樣的事情時,我遇到了幾個問題。我在SO中找不到任何東西可以提供幫助,所以我想問一下,我的簡單示例有什麼問題?jQuery AJAX沒有得到PHP的響應

index.php - 真的不多,只加載2個JS,1個PHP並定義一個按鈕和一個段落。

<html> 
    <head> 
     <script src='jquery-3.0.0.js'></script> 
     <script src='main_js.js'></script>  
    </head> 
    <body> 
     <button id="action" onClick="Send()">Send data</button> 
     <p id="result">Lorem ipsum</p> 

     <?php require('main_php.php'); ?>     
    </body> 
</html> 

main_js.js - 它包含與'onClick'事件關聯的函數。

function Send(){ 
    var data_JSON = { 
     input: "test", 
     message: "Sending..." 
    };   
    $.ajax({ 
     url: 'main_php.php', 
     type: 'POST', 
     data: data_JSON, 
     contentType: 'application/json', 
     success: function(data){     
      alert(data);     
      document.getElementById("result").innerHTML = "DONE!";   
     }  
    }); 

} 

main_php.php - 它偵聽POST請求,從理論上說,併發送回一個JSON與echo。再次,從理論上...

<?php 
if ($_POST){   
    // Make a array with the values 
    $vals = array(
     'input'  => $input, 
     'message' => $message 
    );  
    echo json_encode($vals, JSON_PRETTY_PRINT);  // Now we want to JSON encode these values to send them to $.ajax success. 
    exit;           // to make sure you aren't getting nothing else 
} 
?> 

jQuery的AJAX的success函數運行,如文本 「DONE!」出現在該段落中,但alert消息完全是空的。 alert(data.input)(和message相同)顯示undefined

很明顯,沒有數據發送回AJAX請求。我該如何解決它?

注意:它是整個代碼,沒有其他顯示,我也儘可能縮短和簡化。

+0

我敢肯定,這可以幫助你:http://stackoverflow.com/questions/8050709/ajax-doesnt- get-response-from-php-side?rq = 1 –

+0

不要以爲這實際上是你的問題,但是你在兩個程序之間傳遞數據。你不需要JSON_PRETTY_PRINT – RiggsFolly

+0

所以你看看'數據'的內容使用瀏覽器javascript調試器 – RiggsFolly

回答

2

這是因爲您沒有將PHP的響應作爲JSON發送。

echo json_encode()之上加上以下行;

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

所以你的PHP代碼會是這個樣子,

<?php 
if ($_POST){   
    // Make a array with the values 
    $vals = array(
     'input'  => $input, 
     'message' => $message 
    ); 
    header('Content-Type: application/json');  
    echo json_encode($vals, JSON_PRETTY_PRINT);  // Now we want to JSON encode these values to send them to $.ajax success. 
    exit;           // to make sure you aren't getting nothing else 
} 
?> 

另外,作爲@Ismail提到dataType : 'json'.AJAX調用添加此接受來自API JSON響應。

+1

你遲到了13秒:D –

+0

是啊13秒,SO差別很大:D –

+1

我從來不用使用'header()'你建議所以我不認爲它真的有必要 – RiggsFolly

2
在main_js.js

function Send(){ 
    var data_JSON = { 
     input: "test", 
     message: "Sending..." 
    };   
    $.ajax({ 
     url: 'main_php.php', 
     type: 'POST', 
     data: data_JSON, 
     dataType: 'json', 
     success: function(response){     
      if(response.type == "success")    
      { 
       alert(JSON.stringify(response.data)); 
       alert(response.data.input); 
       document.getElementById("result").innerHTML = response.message;   
      } 
      else 
      { 
       document.getElementById("result").innerHTML = response.message;   
      } 

     }  
    }); 
} 

在PHP代碼

<?php 
$response= array(); 
if (isset($_POST) && !empty($_POST)){   
    // Make a array with the values 
    $vals = $_POST;  
    $response['data']=json_encode($vals);  // Now we want to JSON  
    $response["type"]="success"; 
    $response["message"]="Successfully posted"; 
} 
else 
{ 
    $response=array(
     "type"=>"error", 
     "message"=>"invalid post method" 
    ); 
} 
ob_clean(); 
echo json_encode($response); 
+0

也可以在alert(data.input)中使用if條件。 –

+0

完成後,它顯示「ERROR!」,但不僅當我單擊按鈕時,還將錯誤消息打印到HTML的底部。不知道它是否正確。 –

+0

根據你的建議更改答案:)謝謝 –