1

我從一個瀏覽器擴展程序內容腳本發送到POST我控制的服務器。我在清單中設置好權限。這是我的XHR代碼。 (我想避免這個jQuery)。它發送一個空responseTextXHR在Chrome擴展與CI

var xhr = new XMLHttpRequest(); 
    xhr.open("POST",'http://mysite.com/make',true); 
     xhr.onreadystatechange=function() { 
      if (xhr.readyState == 4) { 
       var res = JSON.parse(xhr.responseText); 
       console.log(res); 
      } 
    } 

    xhr.send({'textbox':data[0].user,'from':'extension'}); 

data[0].user是一個對象,我在CI控制器直接得到了來自Twitter的API

$user = $this->input->get_post('textbox', TRUE); 
$from = $this->input->get_post('from', TRUE); 

$fullURL = 'http://www.google.com'; //example of a URL from code. 

$json = $this->output->set_content_type('application/json'); 
$json->set_output(json_encode(array('URL' => $fullURL))); 

響應文本爲空

,另一方面jQuery的電話正常工作

$.post("http://mysite.com/make", { 'textbox': data[0].user, 'from':'jquery' }, 
    function(data) { 
    console.log(data); 
}); 
+1

是否使用螢火/鉻開發工具? 簽出服務器正在發送什麼響應? 並退後一步..嘗試記錄什麼JSOn字符串是PHP生成? –

+0

我安裝了[chromePHP](http://www.chromephp.com/)。將嘗試調試。 – Chamilyan

+0

但在此之前剛剛嘗試 xhr.post( 「文本=」 +數據[0]的.user + 「&從擴展=」); 而不是你所做的。 我認爲它應該工作。 –

回答

1

原因很簡單,JQuery post方法可以接受JSON,然後將其轉換爲字符串併發送到服務器。

你所要做的就是直接送到這裏JSON:

xhr.send({'textbox':data[0].user,'from':'extension'}) // Incorrect way

發送方法應該要麼接受NULL字符串,它一般由查詢字符串參數一樣

xhr.send("textbox="+ data[0].user + "&from=extension"); // Correct way

這將確保您的數據轉到相應的URL與文本框POST請求的參數。 和queryString將生成像textbox = username1234 & from =分機在數據包的身體不同於一個進入獲取與一邊的URL頭。

jQuery的POST方法把它簡化爲你送你使用JSON,然後在內部將其轉換是將queryString發送參數格式的數據。 你不能直接發送像XHR對象那樣的Javascript對象!

也會檢出這個例子:

http://beradrian.wordpress.com/2007/07/19/passing-post-parameters-with-ajax/

+0

我的服務器代碼不接受查詢字符串。無論如何做到這一點,而不添加查詢字符串的請求? – Chamilyan

+0

您的服務器代碼只接受郵政參數。 CodeIgniter的$ this-> input-> get_post('textbox',TRUE)將使您從發送請求到該控制器的文本框參數。 但它確保安全和其他方面。 只要嘗試添加更改我告訴你你的AJAX代碼發送()。 –

+0

沒有工作。它不會將變量發送到服務器腳本。我可以從服務器向XHR responseText回顯一個靜態字符串,並且工作。請記住,我沒有啓用查詢字符串。我無法啓用它們。 – Chamilyan