2012-12-10 63 views
1

如果我有一個變量需要發佈到PHP腳本而不刷新頁面。 這可能嗎?如果是這樣,怎麼樣?如何將JavaScript數據發佈到PHP?

我使用jQuery的嘗試:

$.ajax({ 
    url: "myphpfile.php", 
    type: "post", 
    data: json/array/whatever, 

    success: function(){ // trigger when request was successfull 
     window.location.href = 'somewhere' 
    } 
    }) 

我怎麼會收到我的PHP腳本傳遞一個數組?

+2

那麼是什麼問題?你正在使用ajax,你在正確的軌道恭喜。 – Jonathan

+0

看看你的$ _POST – danronmoon

+0

那麼,這裏有什麼問題?你真的*試過*你有的代碼嗎? –

回答

1

使用GM_xmlhttpRequest()來允許跨域帖子(它將在大多數情況下)。

的Greasemonkey腳本:

// ==UserScript== 
// @name  _Sending arbitrary data, demo 
// @include http://YOUR_SERVER.COM/YOUR_PATH/* 
// @grant GM_xmlhttpRequest 
// ==/UserScript== 

var someArray  = [1, 2, 3]; 
var serializedData = JSON.stringify (someArray); 

GM_xmlhttpRequest ({ 
    method:  "POST", 
    url:  "http://SERVER.COM/PATH/ShowJSON_PostedData.php", 
    data:  serializedData, 
    headers: {"Content-Type": "application/json"}, 
    onload:  function (response) { 
        console.log (response.responseText); 
       } 
}); 


ShowJSON_PostedData.php:

<?php 
    echo '<title>JSON data</title>'; 

    echo '<h2>JSON post data:</h2><pre>'; 

    $jsonData = json_decode($HTTP_RAW_POST_DATA); 
    print_r ($jsonData); 

    echo '</pre>'; 
?> 


控制檯。將顯示:

<title>JSON data</title><h2>JSON post data:</h2><pre>Array 
(
    [0] => 1 
    [1] => 2 
    [2] => 3 
) 
</pre> 
+0

...什麼?你沒有提供'GM_xmlhttpRequest'的代碼,只是用法,OP沒有提及任何有關跨域(在大多數情況下通常不*)的內容,而且Greasemonkey腳本幾乎不需要用戶友好的東西。 – ceejayoz

+1

@ceejayoz,'GM_xmlhttpRequest'是一個***標準的*** Greasemonkey函數(現在鏈接)和**這是一個Greasemonkey問題!**並且,是的,大多數這樣的場景***是***跨域。如果OP控制服務器,GM腳本目標頁面處於打開狀態,則他不會問「我將如何接收通過我的PHP腳本傳遞的數組」。他也不需要使用GM腳本。現在請刪除您的錯誤downvote。 –

0

該線程的接受的答案可能是真的有用,因爲它顯示了一個簡單的例子:using jquery $.ajax to call a PHP function

我的建議是:做一些工作,然後逐漸增加複雜性,直到你達到你的自定義案件。這樣,你感到更安全,並且當他們進入時意識到潛在的問題。

要從PHP傳遞數組到客戶端,您可以在您的php腳本中使用echo json_encode($myArray);

希望這有助於

+2

任何原因的投票和建議,使其更好?謝謝 ! –

+1

@community在downvote之前擁有一個必填字段將會非常棒。請有人向我展示一個案例,其中您認爲答案很糟糕,但無法解釋原因。 –