2012-03-03 69 views
0
<a href="#" onclick="return purchaseEntry('39873');">ABC</a> 

我打算抓取到網頁並使用正則表達式獲取某些內容。但是,只有在onclick被激活後纔會顯示此內容。我需要進入ABC並獲取內容。我無法使用file_get_content(),因爲沒有鏈接將我帶到ABC頁面。當用戶點擊它時,ABC內容會顯示出來。結果通過Javascript/Ajax/Json調用。通過PHP運行「onclick」通過PHP運行「onclick」

ABC內容是:

Name: XXXX 
Address: XXXXXX 

任何想法如何抓取到ABC和獲取內容?

注意:我將不得不編寫一個抓取到遠程頁面並獲取ABC內容的PHP腳本。

額外的信息:

function purchaseEntry(customerid) { 
    $('customeridfield').value = customerid; 
    if (approvedAgents()) { 
     e1 = $('entrylisttable'); 
     e1.hide(); 
     getExistingDetails(customerid, 'confirmstatusexistingdetails'); 
     $('confirmstatushajjlicenceno').value = ''; 
     $('confirmstatusapproved').checked = false; 
     e1 = $('confirmstatus'); 
     e1.show(); 
    } 

    return false; 
} 

而且,這裏是getExistingDetails:

function getExistingDetails(customerid, existingdetails) { 
    e1 = $(existingdetails); 
    e1.innerHTML = 'Loading ... <img src="/jpg/ajaxloader.gif" />'; 

    var url = '/samex/index.php'; 
    var pars = 'option=com_directory&view=entry2&customerid=' + customerid + '&format=raw'; 
    new Ajax.Request(url, { method: 'get', parameters: pars, 
     onSuccess: function(request) { 
      var json = request.responseText.evalJSON(); 
      jsondata = json['data']; 
      e1 = $(existingdetails); 
      e1.innerHTML = jsondata['clientdata']; 
     }, 
     onFailure: function(request) { 
      e1 = $(existingdetails); 
      e1.innerHTML = 'Unable to get information for customer ' + customerid; 
     } 
     }); 
} 

有什麼建議?

+0

提供purchaseEntry()的js代碼,在哪裏顯示? – sandeep 2012-03-03 10:12:04

+2

javascript和php運行在不同的環境中。他們之間唯一可能的交互是AJAX – 2012-03-03 10:12:09

+0

不太確定我明白你的意思 - 你想基本上從遠程頁面拉這個函數的名稱(和值),然後......運行它? – BenOfTheNorth 2012-03-03 10:12:20

回答

2

您無法從PHP運行JavaScript事件。 PHP是服務器端語言,而HTML和JavaScript是客戶端語言。

可以從客戶端HTML獲取數據和JavaScript是使用下面的方法之一的唯一方法:

使用HTML形式的行動提交數據到服務器。

<form action="/submit.php"> 
    <input name="purchaseEntry" value="39873" /> 
    <input type="submit" value="Submit" /> 
</form> 

使用AJAX調用向服務器發送數據而無需重新加載頁面。

// jQuery ajax 
$.ajax({"url" : "/submit.php", 
     "type" : "post", 
     "data" : "purchaseEntry=" + document.getElementById("purchase-entry") 
     "success" : function() { 
      alert("data sent to server"); 
     } 
); 

當用戶導航到其他頁面時,從$ _REQUEST對象中提取數據。這假設你的數據在鏈接中。

<p><a href="/page2.php?purchaseEntry=39873">Page 2</a></p> 
+0

改寫了我的問題.... – user311509 2012-03-03 11:02:22

+0

大多數爬蟲不能讀取DHTML(動態HTML )。一般來說,您的抓取工具只能看到RAW HTML。然而,當你點擊遠程頁面中的鏈接時,你可以找出被調用的URL,完全繞過UI。除非遠程服務器使用填充返回JSON,否則您需要從服務器獲取它以避免跨域限制。 – jmort253 2012-03-03 11:08:18

+0

快速信息:使用螢火蟲後,我發現我需要的所有內容駐留在e1.innerHTML = jsondata ['clientdata']; ... – user311509 2012-03-03 12:25:17

2

您的purchaseEntry('39873')可以包含一個ajax call到您的php文件。然後

php文件可以從array轉換一個json使用echo json_encode($yourArray)

然後你ajax調用可以從php從接收json string再轉它爲JavaScript array/object迴應。

+0

改寫了我的問題.... – user311509 2012-03-03 10:44:00