Вызов файла .php из $ ajax jQuery в MVC 5 View приводит к ошибке 405

У меня есть приложение MVC 5 с видом, который должен отправить объект JSON в файл / модуль / метод php (у меня нет опыта в php!). метод jQuery выглядит так:

$.ajax({
type: 'POST',
url: "ajax/ajax_get_sql.php",
data: {
a_rules: a_rules,
use_ps: use_prepared_statements,
pst_placeholder: pst_placeholder
},
dataType: "JSON",
success: function(data) {
var html = '';

if(data.hasOwnProperty("error")) {
$("#demo_rules1")
.jui_filter_rules("markRuleAsError", data["error"]["element_rule_id"], true)
.triggerHandler("onValidationError",
{
err_code: "filter_error_server_side",
err_description: "Server error during filter converion..." + '\n\n' + data["error"]["error_message"]
}
);
} else {
html += '<pre id="demo_code"><ul>';
html += '<li>SQL: \n\n' + data["sql"] + '\n\n</li>';
html += '<li>Bind params: \n\n' + JSON.stringify(data["bind_params"], null, '    ') + '</li>';
html += '</ul></pre>';
show_modal($("#modal_dialog"), $("#modal_dialog_content"), html);
}

}
});

Тем не менее, инструменты Chrome показывают ошибку 405 при вызове этого кода.
Я слышал, что это может быть проблема с CORS, но я не нашел способа настроить CORS на MVC.
какие-либо предложения?

0

Решение

Если ошибка 405 Method Not Allowed, вы можете попытаться установить заголовок php, чтобы разрешить доступ из всех доменов.

Access-Control-Allow-Origin: *

используя код php

header('Access-Control-Allow-Origin: *');

Больше информации здесь

0

Другие решения

Обойти это можно, отправив JSON в другую конечную точку, обработав запрос в mvc (или web api), и вернув результат клиенту.

[HttpPost]
public HttpResponseMessage GetSql(TheDtoClass dto)
{
// Create a request using a URL that can receive a post.
WebRequest request = WebRequest.Create ("http://path/to/service/ajax_get_sql.php ");
request.Method = "POST";

string postData = JsonConvert.SerializeObject(dto);
byte[] byteArray = Encoding.UTF8.GetBytes (postData);

request.ContentType = "application/json";
request.ContentLength = byteArray.Length;
Stream dataStream = request.GetRequestStream ();
dataStream.Write (byteArray, 0, byteArray.Length);
dataStream.Close ();

WebResponse response = request.GetResponse ();
dataStream = response.GetResponseStream ();
StreamReader reader = new StreamReader (dataStream);

string responseFromServer = reader.ReadToEnd ();
reader.Close ();
dataStream.Close ();
response.Close ();

return Request.CreateResponse(JsonConvert.DeserializeObject<ResponseDto>(responseFormat));
}

Вы можете узнать больше о классе WebRequest здесь

WebRequest Msdn Page

Единственное изменение, которое вам нужно сделать, — это ввести фактические URL-вызовы и изменить пример, чтобы сопоставить текущее состояние с состоянием веб-запроса.

0

Поэтому после долгих исследований я решил это с помощью следующих шагов:
1. Настройте IIS так, чтобы он поддерживал файлы PHP, и размещал файлы в IIS.
2- Переключил хостинг моего веб-приложения с отладчика Visual Studio на IIS, так что мне не нужно CORS
и это работало без проблем

Мне кажется, что в среде хостинга, которую я использовал, не было поддержки php. Извините, что у меня нет опыта ни в php, ни в том, как работает хостинг. Я думаю, что мне нужно изучить эти вещи как можно скорее.

0