Продолжать, что сказал Dave Ward :
дизайн
<asp:Label runat="server" ID="Label1" Style="display: none;" />
<asp:Button runat="server" ID="Button1" />
Страницы/Управления <час> Код позади
Где-нибудь в разделе загрузки:
Label label1 = (Label)FindControl("Label1");
((Label)FindControl("Button1")).OnClientClick = "ToggleVisibility('" + label1.ClientID + "')";
<час> файл
function ToggleVisibility(elementID)
{
var element = document.getElementByID(elementID);
if (element.style.display = 'none')
{
element.style.display = 'inherit';
}
else
{
element.style.display = 'none';
}
}
JavaScript <час> , Конечно, если Вы не хотите переключаться, но только показывать кнопку/маркировку тогда, корректирует метод JavaScript соответственно.
важный момент здесь - то, что необходимо отправить информацию о ClientID
из управления, которым Вы хотите управлять на стороне клиента в файл JavaScript, или устанавливающий глобальные переменные или через параметр функции как в моем примере.
The reason for the error is the same origin policy. It only allows you to do XMLHTTPRequests to your own domain. See if you can use a JSONP callback instead:
$.getJSON( 'http://<url>/api.php?callback=?', function ( data ) { alert ( data ); } );
Можете ли вы попробовать это без
contentType: application / x-www-form-urlencoded
Мне кажется, что если o.url = 'index.php'
и этот файл существует, это нормально, и в консоли возвращается сообщение об успешном выполнении. Он возвращает ошибку, если я использую url: http://www.google.com
Если я выполняю почтовый запрос, почему бы не использовать напрямую метод $. Post :
$.post("test.php", { func: "getNameAndTime" },
function(data){
alert(data.name); // John
console.log(data.time); // 2pm
}, "json");
Это все намного проще.
Я просматривал исходный код 1.3.2, при использовании JSONP запрос выполняется путем динамического построения элемента SCRIPT, который проходит мимо политики одного домена браузеров. Естественно, вы не можете сделать POST-запрос с помощью элемента SCRIPT, браузер получит результат с помощью GET.
Когда вы запрашиваете вызов JSONP, элемент SCRIPT не создается, потому что он делает это только тогда, когда Тип вызова AJAX установлен на GET.
В этой статье центра разработчиков Mozilla описаны различные сценарии междоменных запросов. В статье указывается, что запрос POST с типом содержимого «application / x-www-form-urlencoded» должен быть отправлен как «простой запрос» (без запроса OPTIONS «предварительной проверки»). Однако я обнаружил, что Firefox отправил запрос OPTIONS, хотя мой POST был отправлен с этим типом содержимого.
Мне удалось выполнить эту работу, создав на сервере обработчик запроса опций, который установил заголовок ответа Access-Control-Allow-Origin на «*». Вы можете ввести более строгие ограничения, задав для него что-то конкретное, например « http://someurl.com ». Кроме того, я прочитал, что, предположительно, вы можете указать список нескольких источников, разделенных запятыми, но я не мог заставить это работать.
Как только Firefox получает ответ на запрос OPTIONS с приемлемым значением «Access-Control-Allow-Origin», он отправляет запрос POST.
У меня была похожая проблема при попытке использовать Facebook API.
Единственный contentType, который не отправлял запрос Preflighted, был только text/plain... а не остальные параметры, упомянутые в mozilla здесь
FYI: Вышеупомянутый Moz doc предполагает, что заголовки X-Lori должны вызывать запрос Preflighted... это не так.
Другой способ обойти проблему - использовать прокси-скрипт. Этот метод описан для примера здесь
Я использовал следующий код на стороне Django, чтобы интерпретировать запрос OPTIONS и установить требуемые заголовки Access-Control. После этого мои междоменные запросы из Firefox начали работать. Как было сказано ранее, браузер сначала отправляет запрос OPTIONS, а затем сразу после этого POST / GET
def send_data(request):
if request.method == "OPTIONS":
response = HttpResponse()
response['Access-Control-Allow-Origin'] = '*'
response['Access-Control-Allow-Methods'] = 'POST, GET, OPTIONS'
response['Access-Control-Max-Age'] = 1000
# note that '*' is not valid for Access-Control-Allow-Headers
response['Access-Control-Allow-Headers'] = 'origin, x-csrftoken, content-type, accept'
return response
if request.method == "POST":
# ...
Edit: похоже, что по крайней мере в некоторых случаях вам также необходимо добавить те же заголовки Access-Control к фактическому ответу. . Это может немного сбивать с толку, поскольку запрос кажется успешным, но Firefox не передает содержимое ответа в Javascript.