2010-08-20 25 views
1
$.post('testeUpdate.php', 'autocomplete', 
     function(dadosResposta) { 

      $('#ns-nome').val(dadosResposta.nsName); 
      $('#ns-endereco').val(dadosResposta.nsAddress); 
     }, 
    "json"); 

我試圖理解這一點。所以,並且在我附近有jquery $ .post引用鏈接:

1)將發送請求發送到testeUpdate.php,然後我們可以傳遞一個名爲'autocomplete'的字符串。精確?

問題1) 傳遞一個發佈請求以該字符串,意味着我們可以稍後,例如, 過程,通過特別在一個條件請求指向: $ _POST [「自動完成」]; ?

2) 後來我們有一個「on success」回調函數接受參數dadosReposta。精確?

問題2) 這dadosResposta是可能來自我們的服務器端腳本?這是一個有我們收到的數據的論據嗎?

3)所以,成功之後,我們要做的是:用某些值填充某個輸入元素。 VAL(dadosResposta.nsName);

問題(S)3) 是這個「點號」來訪問JSON格式數據的方式 - 或者這是走在DOM,因爲我們通常做的方法嗎?是的,那麼json在這裏扮演什麼角色?

非常感謝提前, MEM

回答

1

1)是自動完成的,然後可以使用PHP這種方式進行訪問。 ($ _POST [ '自動完成'])。但除了它會在isset()上顯示的事實 - 它不會有任何數據。

2)是dadosResposta是從服務器返回的響應。如果您在$ .post請求中將最後一個參數設置爲json,則它可以在javaScript中作爲json對象本身使用。要以這種方式顯示數據,在PHP中您可以使用json_encode()

3),請你一次,你的數據進來時你可以做的。但是,如果JSON格式正確點符號只會工作。參考文獻:json.org

4)點記號是訪問JSON格式返回的數據的方式,無關與DOM。如果將$ .post的最後部分更改爲「text」,則可以將服務器返回的數據作爲常規字符串處理。

+0

非常感謝。所以,約1): 我應該有任何數據通過那裏?我的意思是,我應該通過輸入字段的值,一旦用戶停止輸入,我該怎麼做?將是$ .post參數對此的迴應? – MEM 2010-08-20 10:22:55

+0

要發送特定表單的整個數據,jquery中的serialize()函數是有用的。你可以這樣做:var aaa = $(「#your_form_id」)。serialize(); $ .post(「your_url」,aaa,function(){},「text_or_json」); - 所有的數據都會轉到php文件中。輸入中的名稱將是您可以用來在服務器上引用的變量。例如:表單中的的值可以在服務器上以$ _POST ['hello']的形式訪問。 – DMin 2010-08-20 10:54:29

+0

您可以使用jqapi.com詳細學習$ .post,它與jQuery網站具有相同的引用,但其佈局更好,導航更快。 – DMin 2010-08-20 10:58:55

1
  1. 是的,這是正確的,它是唯一的變量後,如你正在檢查isset($_POST['autocomplete']),儘管看起來你真的想在這裏傳遞文本框值,因爲自動完成通常依賴於你已經輸入的內容。
  2. 是的,這個函數在響應返回時運行,參數是從PHP頁面返回的任何數據。
  3. 的反應應該是這個樣子:
    { nsName: 'name', nsAddress: 'address' }
    它使用這些值來填充這些2場,所以點符號從響應獲得價值,JSON只是把這種更清潔: )
+0

@all 3)好的,可以使用Kristoffer S Hansen示例構建響應,如: echo json_encode(array(「nsName」=> $ someString1,「nsAddress」=> $ someString2)); } 我還沒有連接所有的點。請耐心...... :) 我可以「看」服務器端:$ dadosResposta = json_encode(array(「nsName」=> $ someString1,「nsAddress」=> $ someString2)); 和客戶端... 函數(dadosResposta) 但是,如何在SS上的$ dadosResposta,與dadosResposta CS連接? 非常感謝, MEM – MEM 2010-08-20 10:30:49

+0

@MEM - 名稱'dadosResposta'沒有意義,您可以在客戶端將它稱爲'data' ...服務器端也無所謂,它只是根對象,響應看起來應該和我在回答中所做的完全一樣:{nsName:'name',nsAddress:'address'}',該對象是POST回調中的第一個參數引用的內容。還要確保設置JSON MIME類型頭,以便客戶端(jQuery)知道它是JSON並以這種方式處理它,以下是:header('Content-type:application/json');' – 2010-08-20 11:00:48

+0

我意識到名稱doesn沒關係。 我相信$ .post上的最後一個參數(一個字符串「json」會處理jQuery讀取響應的方式,作爲json)是的? 我相信我仍然沒有我的答案。我會在另一個問題上提出。 :)非常感謝時間和意見。 :) – MEM 2010-08-20 11:18:08

1

我用jsFiddle你的代碼,並試圖建立在你有什麼,你可以看到我發送的數據上的jsfiddle json的回聲功能,迴應這樣的(可能是...如果PHP):

echo json_encode(array("post_response"=>$_POST)); 

正如你看到的,我改變了POSTDATA匹配您請求的響應,在服務器端通常會看起來有點像這樣在正常情況下:

if(isset($_POST['somedata'])) 
{ 
    //do stuff... you know, whatever 
    echo json_encode(array("nsName" => $someString1,"nsAddress" => $someString2)); 
} 
+0

我不知道jsFiddle。我仍然不知道該怎麼辦......但我會試一試。 謝謝你最後的剪輯。有了其他答案,我可以更好地瞭解所涉及的所有流程。 非常感謝。 :) – MEM 2010-08-20 10:17:40