2011-09-19 107 views
1

我正在處理一個腳本,該腳本使用GET將一些存儲的數據發送到PHP腳本(將它處理後放入數據庫)。Ajax根本沒有發送數據

這裏的AJAX腳本,即時通訊使用jQuery AJAX (我已經包括了最新的jQuery腳本)

function send(){ 
    $.ajax({ 
    type: "GET", 
    url: "http://examplewebsite.com/vars/parse.php", 
    data: "id=" + id + "&purl=" + purl + "&send" + "true", 
    cache: false, 
    success: function(){ 
     alert("Sent"); 

    } 
    }); 
} 

idpurl是JavaScript的變量。

send()功能在設置:

<a href="#" onclick="send()">Send</a> 

PHP代碼:

<?php 

//Connect to database 
include ("config.php"); 

//Get the values 
$id = $_GET['id']; 
$purl = $_GET['purl']; 
$send = $_GET['send']; 

if ($send == 'true') { 


    $insertdata = "INSERT INTO data (id,purl,send) VALUES ('$id','$purl',+1)"; 
    mysql_query($insertdata) or die(mysql_error()); 
} else { 
    //do nothing 
} 
?> 

當我鍵入http://examplewebsite.com/vars/parse.php?id=123&purl=example&send=true 它的工作原理,在PHP注入的數據到數據庫中,因爲我想但是當我使用send()並希望使用ajax發送數據時,失敗。

我有沒有犯過錯誤?

+1

您的網頁在examplewebsite.com域名上?域名和端口必須完全匹配,以便正常的Ajax調用工作 –

+0

使用檢查器來調查瀏覽器發送的請求和參數。另外,我會建議在數據字段中使用array()而不是字符串。 – jancha

+0

'id'和'purl'的可能值是什麼?也許問題在於你沒有編碼這些值。試試'data:{id:id,purl:purl,send:true},'代替。 –

回答

5

你錯過了發送後=,

function send(){ 

    $.ajax({ 
    type: "GET", 
    url: "http://examplewebsite.com/vars/parse.php", 
    data: "id=" + id + "&purl=" + purl + "&send=" + "true", 
    cache: false, 
    success: function(){ 
     alert("Sent"); 

    } 
    }); 
} 

應該修復它,也。發佈有關您的JavaScript的更多信息。我們只需要假設id和purl被填寫。你有沒有嘗試調試它們(如果這不起作用)。

另外,調試請求的URL,你可以使用firefox或chrome開發工具。哪個網址正在被髮送到PHP頁面,是正確的

+0

您仍然應該對這些值進行編碼。 –

+0

對於使用Ajax的任何人,Web檢查器中的「網絡」窗格是您的朋友。它顯示了你正在發送什麼數據(或不發送)...... – joostdevries

+0

@Felix是的。但這超出了這個問題的範圍。 – Tjirp

0

它取決於您在哪裏運行腳本,因爲ajax調用不適用於其他域。如果您需要在http://example1.com上運行js,並且呼叫轉到http://example2.com,則需要另一種方法。

的想法是使用json

+0

JSON如何幫助進行跨域調用? –

+0

這意味着Ajax不適合用於其他域?我的網站是(例如)www.abc.com,而腳本則在www.bbb.com上。它不能工作? – edward

+0

@Felix:http://en.wikipedia.org/wiki/JSONP – brianreavis

0

嘗試

data: { id: id, purl: purl, send: true } 

看看是否是 「=」,在數據串的任何差異

2

失蹤。

data: "id=" + id + "&purl=" + purl + "&send" + "true", 

應該

data: "id=" + id + "&purl=" + purl + "&send=" + "true", 
+0

搭配'='很好。你仍然應該編碼值。 –

+0

是的,這就是爲什麼! LOL謝謝你的幫助 – edward

+0

Felix,你的編碼是什麼意思?對不起,我還是個新手。 – edward

0


首先,我建議(如果您使用Chrome或Safari)使用Web檢查(右鍵點擊任何地方 - 檢查元素),然後按ESC向控制檯顯示,這將有助於您驗證您的JS代碼。這會告訴你你有'='缺失。

其次,我會嘗試一些更簡單的事情,以確保您能夠訪問該文件。

JS:

// Don't forget encoding the data before sending, this is just a simple example 
$.get("parse.php?sent=true", 
    function(data){ 
     alert("I think i got a nibble..."); 
     alert(data); 
    } 
); 

在php文件:

$sent = (isset($_GET['sent']) && !empty($_GET['sent']))?$sent:false; 

if($sent) echo 'whatever data you want back'; 

只要確保你真正得到的警報,如果是的話,需要從那裏着手構建PHP文件爲您的數據。

希望這個助攻, shai。

+1

感謝您的回覆 – edward