2010-08-03 26 views
13

tôi có chức năng sau đây trong một tập tin .js trong index.htmlJquery: Chạy AJAX tại địa phương mà không có một máy chủ web

function getValues(){ 

$.ajax({ 
    type: 'POST', 
    url: "http://localhost/getData/getdata.php", 
    success: function(data){ 
    var dataValues; 
    var apnd; 

    dataValues = String(data.NSE); 
    apnd = "a"; 
    updateValues(dataValues, apnd); 

    dataValues = String(data.BSE); 
    apnd = "b"; 
    updateValues(dataValues, apnd); 
    }, 
    dataType: "json" 
}); 

} 

này hoạt động tốt khi tôi chạy nó trong một máy chủ web như wamp. Nhưng tôi muốn chạy index.html cục bộ, tức là không có máy chủ web, Người dùng chỉ cần nhấp đúp vào index.html và nó sẽ chạy nhưng nó không chạy. dữ liệu luôn rỗng. Điều gì có thể là vấn đề? Xin lỗi tôi là một siêu JQuery Noob.

mã trong tập tin getdata.php là

<? 

echo json_encode(array("NSE"=>rand(5000, 20000),"BSE"=>rand(5000, 20000))); 

?> 
+1

Vui lòng xóa một điều, bạn vẫn đang đăng (thực hiện cuộc gọi AJAX) đến máy chủ web ngay cả khi bạn đang chạy trang web mà không có máy chủ web? –

+1

Tôi đề nghị bạn sử dụng 'php -S localhost: 80' để bắt đầu một máy chủ web đơn giản. – ahui

Trả lời

3

Bạn không thể làm điều đó, bạn nên mở file html của bạn cũng từ địa chỉ máy chủ web ví dụ http://localhost/yoursite/file.html hay thậm chí là url máy chủ từ xa. Bạn cần phải đi qua url máy chủ/máy chủ.

7

AJAX cần một máy chủ web để liên lạc với nó để có thể truy xuất bất kỳ dữ liệu nào; bằng không nó chỉ nói chuyện với một bức tường. Chạy tập lệnh mà không cần máy chủ web giống như đang cố thực hiện cuộc gọi không có dịch vụ di động. : D

6

Máy chủ web chính xác là những gì đang xử lý tất cả các chi tiết cho bạn.

Bạn không thể POST mà không cần máy chủ web đăng lên. HTTP = giao thức web, do đó bạn không thể có URL HTTP mà không cần máy chủ web nhắm mục tiêu.

Máy chủ web cũng là quá trình yêu cầu trang PHP của bạn và chạy trình thông dịch PHP, quản lý các đầu vào và đầu ra.

Tại sao bạn muốn chạy cục bộ?

+2

Tôi nghĩ rằng anh ấy đang chạy trang web cục bộ, (thông qua C: \ ... \ index.html) nhưng anh ấy vẫn đang đưa ra yêu cầu tới máy chủ web (với php). Tôi nghĩ rằng đó là một vấn đề kịch bản trang web chéo (xem câu trả lời của tôi), không phải là một vấn đề phân tích cú pháp. –

+0

có chính xác như Bob nói – Steven

3

Đọc số SOP. Việc truy cập dữ liệu từ một miền khác với miền hiện tại bị chặn vì lý do bảo mật.

+4

Tôi không nghĩ rằng điều này có liên quan đến vấn đề của mình. –

15

Khi bạn chạy index.html từ một tệp mà AJAX hoạt động. Nhưng vấn đề xảy ra bởi vì bạn đang xem tệp tại địa chỉ "tệp: //....../index.html" và bạn đang thực hiện một yêu cầu AJAX tới "http://localhost/..../something.php" không ĐƯỢC PHÉP vì kịch bản lệnh chéo trang web. Tất cả các yêu cầu AJAX phải đi đến cùng một tên miền/máy chủ.

Đây là giả định rằng bạn đang xem tệp bằng cách nhấp đúp vào tệp đó và vẫn thực hiện yêu cầu AJAX cho máy chủ web.

+0

Tôi không biết điều này. cảm ơn bạn – Steven

+0

Ngoài ra, nó sẽ không hoạt động ngay cả khi URL là tương đối, nếu không, một trang web chạy trên đĩa CD sẽ có quyền truy cập vào toàn bộ hệ thống tệp. –

5

Ajax không hoạt động trên giao thức tệp: // như được đề cập bởi người khác. Có lẽ bạn muốn một cái gì đó giống như http://www.appcelerator.com/ để tạo các ứng dụng dành cho máy tính để bàn với html/js/css

3

Tôi đang sử dụng AJAX "cục bộ" mà không cần máy chủ web tôi đến giải pháp như thế nào bạn có thể làm điều đó. Với JavaScript, các phương thức của đối tượng XMLHttpRequest() chủ yếu được tạo ra bởi trình duyệt và bạn cần phải loại bỏ các phương thức do máy chủ Web tạo ra (xmlhttp.status == 200). Các công trình sau:

<script> 
window.onload = function() { 

    var input = document.getElementById("input"); 

    input.onclick = function() { 
     var xmlhttp; 
     xmlhttp = new XMLHttpRequest(); 
     xmlhttp.onreadystatechange = function() { 
      if (xmlhttp.readyState == 4) { 
       document.getElementById("response").innerHTML = xmlhttp.responseText; 
      } 
     } 
     xmlhttp.open("GET", "response.html", true); 
     xmlhttp.send(); 
    } 
} 
</script> 
</head> 

<body> 
<h3>AJAX Request/Response</h3> 
<p></p> 
<input id="input" type="button" value="Call AJAX" /> 
<p></p> 
<div id="response"></div> 
+2

Điều này không còn đúng trong các phiên bản Chrome mới nhất (lỗi: "Yêu cầu nguồn gốc chéo chỉ được hỗ trợ cho các giao thức giao thức: http, dữ liệu, tiện ích mở rộng chrome, https, chrome-extension-resource.") Và Firefox (lỗi: " Quyền truy cập vào URI bị hạn chế bị từ chối "). – adelphus

Các vấn đề liên quan