2012-03-21 51 views
0

次のajax呼び出しで少し問題があります。phpファイルからデータを返さないAjax呼び出し

function question() { 
//ajax call to fetch data from database 
var course = "St.Andrews"; 
var dataString = "course=" + course; 

$.ajax({ 
    type: "GET", 
    url: "http://www.webaddress/fetch.php", 
    datatype: "json", 
    data: course, 

    success: function(datas){ 
    console.log(datas); 
    }, 
    error: function(XMLHttpRequest, textStatus, errorThrown){ 
    console.log("error:" + XMLHttpRequest.responsetext); 
    } 
    }); 
} 

何らかの理由で、取得した結果を表示できません。結果を返す私のPHPファイルは、ブラウザからナビゲートして、返された結果を有効な形式で取得すれば正常に動作します。

コンソールログを確認すると、パラメータが正しく表示され、エラーが表示されることがあります。未定義です。 誰かが私が間違ってやっていることについて、感謝します。

ここは私のPHPスクリプトです。

1)あなたのPHPスクリプトが有効なJSONを返していません。

<?php 
//include databse details 
require_once 'login.php'; 

//connect to database or return error 
$db_server = mysql_connect($db_hostname, $db_username, $db_password); 
if (!$db_server) die("unable to connect to MYSQL:" . mysql_error()); 

//select database or return error 
mysql_select_db($db_database) 
or die("Unable to select database: " . mysql_error()); 

if (isset($_GET['course'])) { 

    $course = $_GET['course']; 

    //set the character code 
    mysql_query('SET CHARACTER SET utf8'); 

    //make the query 
    $query = "SELECT * FROM questions WHERE course = '" . $course . "' "; 
    $result = mysql_query($query) or die (mysql_error()); 

    if ($result !== false && mysql_num_rows($result) > 0) { 

     $row = mysql_fetch_array($result, MYSQL_ASSOC); 

     $question = $row['question']; 
     $answer = $row['answer']; 
     $incorrect = $row['incorrectAnswer']; 
     $difficulty = $row['difficulty']; 

     //Json row 
     $json = array ("question" => $question, "answer" => $answer, "incorrect" => $incorrect, "difficulty" => $difficulty); 
    } else { 
     //catch any errors 
     $json = array("error" => "Mysql query error"); 
    } 

    //set header for json data 
    header("Content-Type: application/json", true); 
    //return Json 
    echo json_encode($json); 
} else { 
    echo "Needs course to advance dingbat"; 
} 
+0

を、あなたは、クロスドメインリクエストを行っていますか? – Shyju

+0

エラーCBに 'console.log()'を追加する必要があります。 – Shikiryu

答えて

1

最も可能性の高い理由は、別のドメインからそのURLを呼び出していることです。セキュリティ上の理由からプレーンjsonを使用することはできません.jsonpを使用する必要があります。

その修正するには: JS

var course = "St.Andrews"; 
var dataString = {course: course, callback : "?"}; 

$.ajax({ 
    type: "GET", 
    url: "http://www.webaddress/fetch.php", 
    datatype: "jsonp", 
    data: course, 

    success: function(datas){ 
    console.log(datas); 
    }, 
    error: function(XMLHttpRequest, textStatus, errorThrown){ 
    console.log("error:" + XMLHttpRequest.responsetext); 
    } 
    }); 
} 

PHP

<?php header('content-type: application/javascript; charset=utf-8'); 

$data = array(1, 2, 3, 4, 5, 6, 7, 8, 9); 

echo $_GET['callback'] . '('.json_encode($data).')'; 
+0

情報ありがとう、私はPHPコード – JPK

+0

@ JPKで更新しましたが、同じドメインまたは別のドメインの呼び出しですか? –

+0

私はデスクトップ上のローカルファイルからajax呼び出しを作成しており、サーバには置かれません – JPK

1

は、私は2つの可能性を参照してください。データ型パラメータとしてjsonを指定してください。実際にjsonを返すようにしてください。

2)同じ発信元ポリシーに違反しています。あなたのURLはhttp://www.webadddress/です...ブラウザがそのURLからスクリプトをロードしない限り、xhrでそのURLにアクセスすることはできません。

+0

これは、www.domain.comとdomain.comに適用されます。 –

+0

Topener、はい、私はちょうど彼が彼の例で持っていたURLをコピーしました... – hvgotcodes

+0

フィードバックに感謝、私は私のPHPファイルを表示するために私のコードを更新しました – JPK

関連する問題