2016-10-03 67 views
-2

我正在使用AJAX來觸發我的validation.php文件。我想在該文件中連接到我的數據庫,所以我包含了connect.php文件,但它導致了一些問題。Require_once與JSON編碼混合

<script type="text/javascript"> 
$(document).ready(function(){ 
    $("#offer-form").submit(function(e){ 
     e.preventDefault(); 

     $.ajax({ 
      type : 'POST', 
      data: { 
       'name': $('#name-input').val() 
      }, 
      url : 'validation.php', 
      success : function(data) { 
       $("#name-error").text(data["name-error"]); 
      } 
     }); 
     return false; 
    }); 
}) 

validation.php

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

$error = array("name-error" => ""); 

require_once "connect.php"; 

$error['name-error'] = "error"; 

echo json_encode($error); 
?> 

connect.php

<?php 
$serverName = "localhost"; 
$dbName = "test"; 
$username = "root"; 
$password = ""; 

try 
{ 
    $conn = new PDO("mysql:host=$serverName; dbname=$dbName", 
        $username, 
        $password, 
        array(PDO::ATTR_EMULATE_PREPARES => false, 
         PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION) 
        ); 
    echo "Connected successfully"; 
} 
catch (PDOException $e) 
{ 
    echo "Connection failed: " . $e->getMessage(); 
} 
?> 

我簡化了我的代碼。問題是在我的validation.php文件中使用require_once導致名稱錯誤不能顯示。另一個奇怪的事情是,當我在瀏覽器中輸入.../validation.php時,這個文件可以正常工作。我已經在我的主文件(包括上面顯示的腳本)中使用connect.php,並且它工作正常。

+0

你的迴應無效JSON – apokryfos

+0

你是什麼意思? –

回答

2

因此,這是發生了什麼事:

您的瀏覽器會收到類似:

這是一個包含JSON響應:

Connected successfully 
    {"name-error":"error"} 

或者

Connection failed: bla bla bla 
    {"name-error":"error"} 

在任何情況下,這都不是有效的JSON。

您可以用另一種方式解決這個問題:

connection.php

<?php 
$serverName = "localhost"; 
$dbName = "test"; 
$username = "root"; 
$password = ""; 


return new PDO("mysql:host=$serverName; dbname=$dbName", 
        $username, 
        $password, 
        array(PDO::ATTR_EMULATE_PREPARES => false, 
         PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION) 
        ); 

validation.php

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

try { 
    $connection = require "connect.php"; //You can still set the variable in "connect.php" and use it here, but this shows intent better 
    echo json_encode(array("name-error" => "There was no error"); 
} catch (PDOException $e) { 
    echo json_encode(array("name-error" => $e->getMessage()); 
} 
+0

不幸的是它不起作用。 –

0

你必須告訴數據類型響應

這樣的

$.ajax({ 
     type : 'POST', 
     data: { 
      'name': $('#name-input').val() 
     }, 
     url : 'validation.php', 
     dataType: json, 
     success : function(data) { 
      $("#name-error").text(data["name-error"]); 
     } 
    }); 
+0

仍然不工作:(不知道爲什麼,但建立與數據庫的連接正在搞亂json響應。 –

0

問題解決了!我發現我的PHP腳本在JSON響應數組之前添加了「\ ufeff」。所有這些都是因爲我將文件編碼設置爲帶有BOM的UTF-8。感謝大家的幫助!