2011-12-09 71 views
1

我一直想弄清楚如何在我的情況下使用jsonp,但沒有運氣。這將對點擊進行計數,並在每次點擊時將名稱和位置寫入txt文件。用jsonp發送數據onclick

<script> 
var count1 = 0; 
function countClicks1() { 
count1 = count1 + 1; 
document.getElementById("p1").innerHTML = count1; 
} 
function doAjax() 
$.ajax({ 
    type: "POST", 
    url: "phpfile.php", 
    data: "name=name&location=location", 
    success: function(msg){ 
    alert("Data Saved: " + msg); 
    } 
}); 
} 

document.write('</p>'); 
document.write('<button onclick="countClicks1(); doAjax();">Count</button>'); 
document.write('</p>'); 
document.write('<p id="p1">0</p>'); 
</script> 

這是php文件phpfile.php

<?php 
$name = $_POST['name']; 
$location = $_POST['location']; 
$myFile = "test.txt"; 
$fh = fopen($myFile, 'w') or die("can't open file"); 
fwrite($fh, $name); 
fwrite($fh, $location); 
fclose($fh); 
?> 

如果這兩個文件都在同一個域中的一切都很好。但是如果我想爲另一個域執行相同的操作,它將無法工作。我想用jsonp將相同的信息發送到phpfile.php。我知道它應該與GET,但我不知道如何。

+0

這不是JSONP。 –

+0

您可以使用getJSON:http://api.jquery.com/jQuery.getJSON/ –

+0

請停止使用document.write。它使我的眼睛受傷... –

回答

1

首先,你的php文件不會輸出任何東西,所以我根本不會調用這個JSONP。 JSONP是一種使用GET請求獲取JSON數據的方法,該請求返回一個可以使用<SCRIPT>標記加載的Javascript塊。

對於做JSONP你自己,你必須做這樣的事情:

<?php 
$callback = $_GET['callback']; 
$name = $_GET['name']; 
$location = $_GET['location']; 
$myFile = "test.txt"; 
$fh = fopen($myFile, 'w') or die("can't open file"); 
fwrite($fh, $name); 
fwrite($fh, $location); 
fclose($fh); 
header("Content-Type: application/javascript"); 
?> 

<?php echo $callback; ?>("Message from the server"); 

然後執行調用是這樣的:

$.getJSON("http://server/phpfile.php?name=FOO&location=BAR&callback=?", 
      function(message) { 
       alert(msg); 
      }); 

但是...既然你不實際上不會從服務器返回任何數據,只需使用正確的URL僞造圖像即可。這將大大減少開銷。

+0

謝謝你的幫助! – Ciprian

+0

如何從服務器返回數據?我想檢查用戶是否登錄 – Ciprian