簡體   English   中英

AJAX返回奇怪的HTML文件而不是JSON

[英]AJAX returning a weird HTML file instead of JSON

我正在將AJAX與jQuery結合使用,試圖從數據庫中獲取響應,但是我什至無法獲得正確的JSON響應。 響應而不是JSON,是來自XAMPP頁面的HTML代碼(我正在使用它來進行本地測試)。

這是jQuery和AJAX的JS代碼:

 $('#salvar').click(function(e) { e.preventDefault(); var dados = $('buscaCep').serialize(); $.ajax({ url: "resposta.php", data: dados, type: "POST", dataType: "json", success: function(response) { console.log(response); }, error: function(jqxhr, textStatus, errorThrown) { console.log("jqXHR: ", jqxhr); console.log("textStatus: ", textStatus); console.log("errorThrown: ", errorThrown); } }); return false; }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script> 

這是“ resposta.php”文件:

 <?php $arr = array(); $arr['cep'] = $_POST['cep']; $conn = ... $sql = ... if ( $conn->ping() ) { $arr['connected'] = true; } else { $arr['connected'] = false; } if ( $conn->query($sql) === TRUE ) { $arr['xstatus'] = "Created" ; $arr['id'] = $conn->insert_id; } else { $arr['xstatus'] = "Error" ; $arr['message'] = $conn->error; } $myJSON = json_encode($arr, JSON_HEX_QUOT | JSON_HEX_TAG); echo $myJSON; ?> 

我得到的怪異反應是:

AJAX中的HTML響應

我什至不知道這是從哪里來的。 它是XAMPP的HTML文件,這是我用來制作本地服務器的軟件包,但我不知道為什么。 試圖尋找類似的問題,但沒有發現任何東西。

這就是我所做的(或類似的事情)

  $.ajax({
    url: "resposta.php",
    data: dados,
    type: "POST",
    dataType: "json",
    always: function(jqxhr, textStatus, errorThrow) {
           try {
                //in the case of a "real" error throw and catch it (DRY like)
                if(errorThrow) throw errorThrow; 
                //in the case we can't parse the JSON response catch that too
                var data = JSON.parse(jqxhr.responseText);

                 /*... other code ...*/

           } catch(e) {
                 console.log("jqXHR: ", jqxhr);
                 console.log("textStatus: ", textStatus);
                 console.log("errorThrown: ", e);
           }
    }
});

即使您碰巧遇到404錯誤或任何錯誤,也總是返回,但是如果您不發送application/json標頭,則瀏覽器可能無法自行解析JSON數據,但這沒關系,因為您可以嘗試解析它然后失敗時,您可以記錄錯誤。

您可能想出了一種方法來確定頁面是否響應404(並將其添加到catch塊中,以獲得更明智的錯誤)。 我在這里所說的404不是一個實際的404,而是框架中無法解決的路由(我並沒有真正注意您使用的是什么),其中一些可能設置了正確的HTTP狀態。 有些人可能只是顯示某種搜索頁面,並且一切正常。

我曾經(很久以前)發生過這種情況,無論如何我都會得到200個響應,並為響應添加了一些垃圾HTML搜索頁面。

希望能幫助到你。

我沒有測試您的代碼。 但是隨着您的錯誤消息,我可以說些什么...

  1. 您的AJAX代碼可能在jQuery聲明之上。
  2. 使用最新版本的JQuery
  3. 如果您使用局部視圖,則將AJAX正確包裝在腳本部分中

 <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script> <script type="text/javascript"> $(document).ready(function () { $('#salvar').click(function(e) { e.preventDefault(); var dados = $('buscaCep').serialize(); $.ajax({ url: "resposta.php", data: dados, type: "POST", dataType: "json", success: function(response) { console.log(response); }, error: function(jqxhr, textStatus, errorThrown) { console.log("jqXHR: ", jqxhr); console.log("textStatus: ", textStatus); console.log("errorThrown: ", errorThrown); } }); return false; }); 

您可以嘗試以下方法:

更換

$myJSON = json_encode($arr, JSON_HEX_QUOT | JSON_HEX_TAG);

$myJSON = json_encode($arr, JSON_FORCE_OBJECT);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM