2009-08-15 27 views

Trả lời

91

Vâng, bạn cần có chức năng javascript được kích hoạt bởi một onclick thực hiện tải AJAX của trang và sau đó trả về false, theo cách đó chúng sẽ không được chuyển hướng trong trình duyệt. Bạn có thể sử dụng những điều sau đây trong jQuery, nếu điều đó có thể chấp nhận được đối với dự án của bạn:

<script type="text/javascript" src="jquery.min.js"></script> 
<script type="text/javascript"> 
function doSomething() { 
    $.get("somepage.php"); 
    return false; 
} 
</script> 

<a href="#" onclick="doSomething();">Click Me!</a> 

Bạn cũng có thể đăng lại nếu bạn cần sử dụng giá trị biểu mẫu (sử dụng phương thức $ .post()).

+6

bạn nên thử cũng trả về false từ hàm, do đó HREF không được theo dõi. –

+5

2 năm sau, bây giờ tôi nhận ra những gì làm cho một câu trả lời tốt như vậy! – chustar

+2

@Parrots: nếu tôi muốn chuyển ID tới somepage.php, làm thế nào tôi có thể đạt được điều này? Giả sử tôi thay đổi liên kết "a" thành onclick = "doSomething ();" và làm thế nào tôi có thể chuyển nó vào trang php? Cảm ơn – nasty

4

Bạn không thể chạy PHP khi người dùng nhấp vào liên kết mà không rời khỏi trang trừ khi bạn sử dụng AJAX. PHP là một ngôn ngữ kịch bản serverside, có nghĩa là thứ hai mà trình duyệt nhìn thấy trang, không có PHP trong đó.

Không giống như Javascript, PHP được chạy hoàn toàn trên máy chủ và trình duyệt sẽ không biết cách diễn giải nó nếu nó bit ở phía sau. Cách duy nhất để gọi mã PHP là thực hiện yêu cầu Trang, bằng cách làm mới trang hoặc sử dụng javascript để tìm nạp trang.

Trong giải pháp AJAX, về cơ bản trang sử dụng javascript để gửi yêu cầu trang đến một trang khác trên miền của bạn. Javascript sau đó được bất cứ điều gì bạn quyết định để echo trong phản ứng, và nó có thể phân tích nó và làm những gì nó muốn từ đó. Khi bạn tạo phản hồi, bạn cũng có thể thực hiện bất kỳ công cụ phụ trợ nào như cập nhật cơ sở dữ liệu.

+1

"Bạn không thể chạy PHP khi người dùng nhấp vào liên kết trừ khi bạn sử dụng AJAX". Eh? –

+0

Chính xác những gì tôi đã nói. Trừ khi bạn yêu cầu một trang mới, bạn không thể chạy PHP. –

+1

PHP chỉ chạy khi các trang được yêu cầu. –

10

Như những người khác đã đề xuất, hãy sử dụng JavaScript để thực hiện cuộc gọi AJAX.

<a href="#" onclick="myJsFunction()">whatever</a> 

<script> 
function myJsFunction() { 
    // use ajax to make a call to your PHP script 
    // for more examples, using Jquery. see the link below 
    return false; // this is so the browser doesn't follow the link 
} 

http://docs.jquery.com/Ajax/jQuery.ajax

+1

Không có lý do để downvote anh chàng chỉ vì anh ta không sử dụng jQuery. Ai đó có lẽ nên chỉnh sửa bài đăng để sửa liên kết. –

+0

Cảm ơn bạn đã chỉnh sửa liên kết. Tôi chỉ cần thêm liên kết vào jquery, nhưng không phải là mã thực sự chỉ trong trường hợp nó không phải là một lựa chọn. Không phải mọi người đều sử dụng Jquery, bất kể họ muốn bao nhiêu (hợp đồng hợp pháp ngu ngốc!) –

+0

Bạn ít nhất nên thêm ví dụ mã AJAX không jquery vào trong hàm của bạn, vì bạn chỉ đang ghi lại chức năng onclick của javascript , mà anh ta đã biết về: P – Parrots

0

hoặc gửi người dùng đến một trang khác mà không nó

<a href="exec.php">Execute PHP</a> 

hoặc làm điều đó với ajax

<script type="text/javascript"> 
// <![CDATA[ 
    document.getElementById('link').onclick = function() { 
     // call script via ajax... 
     return false; 
    } 
// ]]> 
</script> 
... 
<a href="#" id="link">Execute PHP</a> 
1

Có là cách duy nhất tốt hơn là AJAX như mọi người đều đề xuất trong bài đăng của họ. Cách khác là sử dụng IFrame như dưới đây:

<iframe name="f1" id="f1"> </iframe> 

<a href='yourpage.php' target='f1'>Click </a> 

Bây giờ bạn sẽ nhận được đầu ra trong IFrame (bạn có thể đặt bất cứ nơi nào bạn cần IFrame trong trang hoặc sự kiện giấu nó và kết quả từ kịch bản).

Hy vọng cho giải pháp không Ajax này sẽ tốt hơn.

-1

này nên làm việc cũng

<a href="#" onclick="callFunction();">Submit</a> 

<script type="text/javascript"> 

function callFunction() 
{ 
    <?php require("functions.php"); ?> 
} 
</script> 

Cảm ơn,

cowtipper

+1

Làm thế nào có thể một yêu cầu php() được kích hoạt từ một nhấp chuột javascript? – billrichards

3

Tôi biết bài này là cũ nhưng tôi chỉ muốn thêm câu trả lời của tôi!

Bạn đã nói để đăng nhập người dùng ra ngoài KHÔNG chỉ đạo ... phương pháp này KHÔNG chuyển hướng nhưng nó trả về người dùng đến trang họ đang truy cập!đây là triển khai của tôi:

// every page with logout button 
<?php 
     // get the full url of current page 
     $page = $_SERVER['PHP_SELF']; 
     // find position of the last '/' 
     $file_name_begin_pos = strripos($page, "/"); 
     // get substring from position to end 
     $file_name = substr($page, ++$fileNamePos); 
    } 
?> 

// the logout link in your html 
<a href="logout.php?redirect_to=<?=$file_name?>">Log Out</a> 

// logout.php page 
<?php 
    session_start(); 
    $_SESSION = array(); 
    session_destroy(); 
    $page = "index.php"; 
    if(isset($_GET["redirect_to"])){ 
     $file = $_GET["redirect_to"]; 
     if ($file == "user.php"){ 
      // if redirect to is a restricted page, redirect to index 
      $file = "index.php"; 
     } 
    } 
    header("Location: $file"); 
?> 

và ở đó chúng tôi đi!

mã nhận tên tệp từ url đầy đủ không phải là bằng chứng lỗi. ví dụ, nếu các chuỗi truy vấn có liên quan với un-escaped '/' trong chúng, nó sẽ thất bại.

Tuy nhiên, có rất nhiều tập lệnh ở đó để lấy tên tệp từ url!

Mã hóa hạnh phúc!

Alex

2

Bạn đã nói mà không cần chuyển hướng. Vâng nó một mã javascript:

<a href="JavaScript:void(0);" onclick="function()">Whatever!</a> 

<script type="text/javascript"> 
function confirm_delete() { 
    var delete_confirmed=confirm("Are you sure you want to delete this file?"); 

    if (delete_confirmed==true) { 
     // the php code :) can't expose mine ^_^ 
    } else { 
     // this one returns the user if he/she clicks no :) 
     document.location.href = 'whatever.php'; 
    } 
} 
</script> 

cung cấp cho nó một thử :) hy vọng bạn thích nó

+2

bằng cách này một whatever