2012-08-31 72 views
0

我正在使用codeigniter應用程序,該應用程序基於從我的模型中的函數返回的數據庫查詢動態生成一些html元素。來自不包含數據的php函數的XMLHttpRequest響應

在我的一個觀點中,我使用XMLHttpRequest在我的一個控制器中調用一個php函數,該函數反過來以字符串的形式從我的模型獲取數據,併爲響應文本回應它。我的JavaScript代碼如下所示:

var xmlHttp = new XMLHttpRequest(); 
xmlHttp.open("POST", "/controller/my_function", true); 
var postStr = "name="+proposalName+"&data="+data; 
xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); 
xmlHttp.send(postStr); 
var response = xmlHttp.responseText; 

被調用的函數如下:

public function my_function(){ 
$data['name'] = $this->input->post('name'); 
$data['data'] = $this->input->post('data'); 
$string = $this->my_model->my_model_function($data); 
echo $string; 
} 

模型正確返回字符串,即使只是呼應的隨機數或字符串中的功能仍然沒有從響應文本中獲得任何信息。無論我嘗試在函數中回顯,在響應文本中都不會顯示任何內容。我在這裏做錯了什麼?我如何獲得responseText從我的php函數中獲取正確的值?

編輯:固定postStr可變

回答

3
var post Str = "name="+proposalName+"&data="+data; 

這是一個語法錯誤複印問題。當JavaScript遇到Str時,JavaScript就會崩潰。 HTTP請求從不發送。

即使發送了,您也正在發出一個異步請求(open的第三個參數是true),所以它在接收到響應之前不會鎖定整個頁面。在響應設置之前,您將讀取xmlHttp.responseText

您需要一個onreadystatechange函數。

查看MDN documentation for XMLHttpRequest其中有例子。

2

夫婦的主要問題:

1)JavaScript是有效。

var post Str = "name="+proposalName+"&data="+data; 

post Str有一個空格。這段代碼不會運行。

2)你真的需要就如何使用XMLHttpRequest

閱讀本讀了,它應該幫助: http://www.jibbering.com/2002/4/httprequest.html

+1

是的,我很抱歉,我在全球複製代碼有錯誤,我的真實代碼中沒有空間。 –

+0

我改變了第三個.open參數爲false,它返回了我想要的結果,結果我唯一的錯誤是我自己誤解了函數被調用的原因!感謝您的信息,因爲我是一名仍在學習JavaScript的PHP開發人員。 –

+0

執行同步XMLHttpRequests是一種不好的做法,在實踐中使用它之前請三思。 – 19greg96