2016-10-03 64 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。感谢大家的帮助!