2014-07-02 35 views
0

我有問題從我的服務器通過id獲取jsonp。 我相信我的PHP是好的,但我不知道如何解析從PHP服務器的ID到htlm-jquery。如何從php頁面解析id通過jsonp的HTML-jquery頁面

我的PHP頁面:

<?php 

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

include 'config.php'; 

$con = mysql_connect($dbhost, $dbuser, $dbpass) or die ("Could not connect: " . mysql_error()); 
mysql_select_db($dbname, $con); 

$id=$_GET['id']; 

$sql = "select * from ios where id=$id"; 
$result = mysql_query($sql) or die ("Query error: " . mysql_error()); 

$records = array(); 

while($row = mysql_fetch_assoc($result)) { 
$records[] = $row; 

} 

echo $_GET['jsoncallback'] . '(' . json_encode($records) . ');'; 

//////////////////// 
?> 

而這個偉大的工程,我在PHP ID了JSON對象。 你可以檢查例如http://www.dr-trkuljic.com/tekst.php?id=1(你可以嘗試使用id 2,3和4),你會得到結果。

但我不知道如何解析,在jQuery的在我的html頁面

我在我的html頁面使用此:

$(document).ready(function(){ 
    var output = $('.nesa'); 
    $.ajax({ 
     url: 'http://www.dr-trkuljic.com/tekst.php', 
     dataType: 'jsonp', 
     data: 'id', 
     jsonp: 'jsoncallback', 
     timeout: 5000, 
     success: function(data, status){ 
      $.each(data, function(i,item){ 

       //var ispisi = '<li>' + item.naziv + '</li>' ; 

       var ispisi = item.naziv + item.tekst; 


       output.append(ispisi); 
      }); 
     }, 
     error: function(){ 
      output.text('There was an error loading the data.'); 
     } 
    }); 
}); 

所以,我的問題是如何解析(顯示)由我的HTML頁面中的ID? 準確地說,我的服務器http://www.dr-trkuljic.com/tekst.php?id=1的結果如何得到我的html頁面?

謝謝。

回答

0

當我覺得我以前的答案是不正確的,讓我編輯:

刪除後「(」和「)」從JSON陣列周圍,你可以簡單地使用這種快捷方便的簡寫格式爲您的jQuery http調用:(由於Content-Type頭,所有解析已經執行)。然後您可以自由訪問該對象的相應屬性。

有關如何使用jQuery的$。獲得()和$。員額(),等等...請訪問此鏈接進一步的例子: http://api.jquery.com/category/ajax/shorthand-methods/

$(document).ready(function(){ 
    var output = $('.nesa'); 
    var idNumber = 1; 

    $.get('http://www.dr-trkuljic.com/tekst.php', {id: idNumber}, function(data, status){ 
     $.each(data, function(i,item){ 

      //var ispisi = '<li>' + item.naziv + '</li>' ; 

      var ispisi = item.naziv + item.tekst; 

      output.append(ispisi); 
     }); 
    }).fail(function(){ 
     output.text('There was an error loading the data.'); 
    }); 
}); 

爲了克服跨域錯誤,你可以在你的PHP文件與適當的URL發送這個頭,你是從工作:

header("Access-Control-Allow-Origin: http://your-domain-or-localhost"); 
+0

謝謝你試圖幫助我。你能不能請示例如何做到這一點,我真的不熟悉jQuery。謝謝 – user3788491

+0

首先,你的php文件中的json顯然有錯誤。我想出了一個解析錯誤,因爲你的json數組被包圍着一組括號:即([{}])。這應該以方括號開始和結束:[]。 – AverageGuy

+0

再次感謝您試圖幫助我。有了這個例子,我得到了跨域請求被阻止,因爲我試圖用我的本地機器連接到我的服務器。我正在使用這個教程:http://samcroft.co.uk/2011/updated-loading-data-in-phonegap-using-jquery-1-5/另外我不能使用id:1,因爲在這樣我會限制查詢只是1.我需要的東西,當我點擊id = 1獲得1,或id = 1000獲得1000等等。你有什麼想法做什麼?謝謝。 – user3788491

1

1如果你是在同一個域

在PHP變化

echo $_GET['jsoncallback'] . '(' . json_encode($records) . ');'; 

echo json_encode($records); 

JS成功:

success: function(data, status){ 

    var jsonData = JSON.parse(data); 
    var total = jsonData.length; 

    for(var i = 0; i < total; ++i){ 
     var ispis = jsonData[i].naziv + " " + jsonData[i]item.tekst; 
     console.log("My ispis ", ispis); 
    } 
} 

2,如果你想使用JSONP。 (從另一個域或phonegapp獲得響應)

當您需要來自其他域的響應時,您無法使用AJAX請求,您可以執行的操作是在文檔中加載新的腳本,例如在標記中加載該腳本爲JS腳本與您的迴應。在這個js腳本里面,你把你的響應放在一些變量中,你也可以調用一些在已經加載的js文件中定義的函數。例如

echo "var myVar = " . json_encode($records) . '; myCallbackFunc();'; 

比該文件作爲js文件加載到您的文檔 和地方在或者其它任何的js,你想要得到的反應 - myVar的將包含你的迴應,你可以使用,而當響應加載回調函數將被調用

var head= document.getElementsByTagName('head')[0]; 
var script= document.createElement('script'); 
script.type= 'text/javascript'; 
script.src= 'http://www.dr-trkuljic.com/tekst.php?id=1'; 
head.appendChild(script); 

function myCallbackFunc(){ 
    // Do something with myVar 

    var total = myVar.length; 

    for(var i = 0; i < total; ++i){ 
     var ispis = myVar[i].naziv + " " + myVar[i]item.tekst; 
     console.log("My ispis ", ispis); 
    } 
} 

編輯

只是要仔細檢查服務器響應 - JavaScript語法就可以了。

+0

我不在同一個域上。我正在嘗試構建phonegap應用程序,所以我的html不在同一個域上,我需要使用jsonp。我不太明白你寫的是什麼。你能給我寫什麼在html文件中。謝謝 – user3788491

+0

@ user3788491現在查看編輯答案:) – user2432612