Home Php C# Sql C C++ Javascript Python Java Go Android Git Linux Asp.net Django .net Node.js Ios Xcode Cocoa Iphone Mysql Tomcat Mongodb Bash Objective-c Scala Visual-studio Apache Elasticsearch Jar Eclipse Jquery Ruby-on-rails Ruby Rubygems Android-studio Spring Lua Sqlite Emacs Ubuntu Perl Docker Swift Amazon-web-services Svn Html Ajax Xml Java-ee Maven Intellij-idea Rvm Macos Unix Css Ipad Postgresql Css3 Json Windows-server Vue.js Typescript Oracle Hibernate Internet-explorer Github Tensorflow Laravel Symfony Redis Html5 Google-app-engine Nginx Firefox Sqlalchemy Lucene Erlang Flask Vim Solr Webview Facebook Zend-framework Virtualenv Nosql Ide Twitter Safari Flutter Bundle Phonegap Centos Sphinx Actionscript Tornado Register | Login | Edit Tags | New Questions | 繁体 | 简体


10 questions online user: 24

0
votes
answers
40 views
+10

無法在Razor頁面中使用ajax獲取json數據

0

我想從ASP.NET Core 2.0中的Razor頁面獲取一些數據。無法在Razor頁面中使用ajax獲取json數據

但問題是它不返回任何數據。 我也嘗試調試它,它根本不會觸發該方法(OnGetProducts)。

模型Index.cshtml.cs:

private IProductRepository _productRepository; 

    public IndexModel(IProductRepository repository) 
    { 
     _productRepository = repository; 
    } 

    public void OnGet() 
    { 

    } 

    public IActionResult OnGetProducts(int page) 
    { 
     var model = _productRepository.GetProducts().Skip(page * 10).Take(10); 

     return new JsonResult(model); 
    } 

剃刀頁面Index.cshtml

<div id="products"> 
</div> 

@section scripts{ 

<script> 
    $(function() { 
     getProducts(0); 

    }); 


    var isInitialized = false; 

    function getProducts(page) { 
     $.ajax({ 
      type: 'GET', 
      url: "Products", 
      contentType: "application/json", 
      dataType: "json", 
      data: { 
       handler: 'Products', 
       page: page 
      }, 
      success: function (datas) { 
       console.log(datas); 
      } 
     }); 
    } 
</script> 

} 

附:此頁面位於文件夾Pages/Products/Index.cshtml(.cs)

+1

我的第一本能,如果我試圖調試一個失敗的ajax調用將設置錯誤回調,看看它是什麼告訴我出錯了...... –

+0

也在您的瀏覽器中點擊F12,並看看網絡選項卡+控制檯。 – CalC

+0

我問了一個類似的問題,並最終得到它的工作(請參閱prev評論),但決定爲AJAX調用創建Web API控制器是更簡單和更好的方法。 –

沙发
0
0

我通常使用razor函數來生成URL,而不是在js中對其進行硬編碼。如果您的操作沒有被觸發,假設您並非意外地處於發佈模式,這是因爲該URL沒有指向正確的位置。首先設定JS在剃刀像這樣的變量:

var productsURL = @Url.Context("~/products"); 

而且運行YOURDOMAIN /產品在您的瀏覽器,如果你得到一個404

或者我用這個功能來直接使用JS C#對象:

public static IHtmlContent ToJS(this IHtmlHelper htmlHelper, object obj) 
    => htmlHelper.Raw(JsonConvert.SerializeObject(obj)); 

有了一個靜態類創造了這個功能,你還可以創建一個js對象直接是這樣的:

<script> 
    var products = @Html.ToJS(repository.GetProducts().Skip(page * 10).Take(10)); 
</script> 

當然這隻會在頁面加載時創建對象,如果你想在頁面加載後改變它,你可以考慮通過ajax創建一個局部視圖。另請注意,第二種方法比ajax的第一種方法要慢。

0
votes
answers
11 views
+10

AJAX下載不能正常工作

0

我有一個有效的網址,我正嘗試使用進行下載。AJAX下載不能正常工作

下面的代碼有什麼問題?

url = "https://firebasestorage.googleapis.com/v0/b/analyst-3206a.appspot.com/o/research_reports%2FNt7cXdWHFlQuwRcy8wo4B49VNeD3%2Fa?alt=media&token=5521f889-2737-4433-a279-f04999cdff22" 

var xhr = new XMLHttpRequest(); 
xhr.responseType = 'blob'; 
xhr.onload = function(event) { 
    var blob = xhr.response; 
}; 
xhr.open('GET', url); 
xhr.send(); 
+0

這個代碼是沒有錯。你是什??麼意思'不工作'? –

+0

我的意思是沒有下載,它只是默默地運行到完成 – ishandutta2007

+0

你的文件是一個'PNG'格式。看到它的標題:https://imgur.com/a/ZapGY。 –

沙发
0
2

你必須把createObjectURL

url = "https://firebasestorage.googleapis.com/v0/b/analyst-3206a.appspot.com/o/research_reports%2FNt7cXdWHFlQuwRcy8wo4B49VNeD3%2Fa?alt=media&token=5521f889-2737-4433-a279-f04999cdff22" 
 
var a = document.getElementById("a"); 
 
    var xhr = new XMLHttpRequest(); 
 
    xhr.responseType = 'blob'; 
 
    xhr.onload = function (event) { 
 
    var blob = xhr.response; 
 

 
    var a = document.createElement("a"), 
 
     url = window.URL.createObjectURL(blob); 
 
    document.body.appendChild(a); 
 
     a.href = url; 
 
     a.download = "fileName." + blob.type; 
 
     a.click(); 
 
     window.URL.revokeObjectURL(url); 
 

 
    }; 
 
    xhr.open('GET', url); 
 
    xhr.send();

+0

這是下載一個腐敗的pdf。我給的網址是一張圖片。 – ishandutta2007

+2

您可以更改爲:'a.download =「fileName.png」;'。設置擴展名。默認情況下'blob.type'正在返回'pdf' ... –

432
votes
answers
18 views
+10

How to use FormData for ajax file upload

This is my html which I'm generating dynamically using drag and drop functionality.

<form method="POST" id="contact" name="13" class="form-horizontal wpc_contact" novalidate="novalidate" enctype="multipart/form-data">
<fieldset>
    <div id="legend" class="">
        <legend class="">file demoe 1</legend>
        <div id="alert-message" class="alert hidden"></div>
    </div>

    <div class="control-group">
        <!-- Text input-->
        <label class="control-label" for="input01">Text input</label>
        <div class="controls">
            <input type="text" placeholder="placeholder" class="input-xlarge" name="name">
            <p class="help-block" style="display:none;">text_input</p>
        </div>
        <div class="control-group">  </div>
        <label class="control-label">File Button</label>

        <!-- File Upload --> 
        <div class="controls">
            <input class="input-file" id="fileInput" type="file" name="file">
        </div>
    </div>
    <div class="control-group">    

        <!-- Button --> 
        <div class="controls">
            <button class="btn btn-success">Button</button>
        </div>
    </div>
</fieldset>
</form> 

this is my js code...

<script>
    $('.wpc_contact').submit(function(event){
        var formname = $('.wpc_contact').attr('name');
        var form = $('.wpc_contact').serialize();               
        var FormData = new FormData($(form)[1]);

        $.ajax({
            url : '<?php echo plugins_url(); ?>'+'/wpc-contact-form/resources/js/tinymce.php',
            data : {form:form,formname:formname,ipadd:ipadd,FormData:FormData},
            type : 'POST',
            processData: false,
            contentType: false,
            success : function(data){
            alert(data); 
            }
        });
   }
up vote 384 down vote accepted favorite
沙发
+3840
+50
<p>要獲得正確的表單數據使用,您需要執行2個步驟。</ p> <p> <strong>準備工作</ strong> </ p> <p>您可以將整個表單提供給FormData()進行處理</ p> <pre> <code> var form = $('形式')[0]; //你需要在這裡使用標準的javascript對象var formData = new FormData(form); </ code> </ pre> <p>或指定FormData()的精確數據</ p> <pre> <code> var formData = new FormData(); formData.append('section','general'); formData.append('action','previewImg'); //附加文件formData.append('image',$('input [type = file]')[0] .files [0]); </ code> </ pre> <p> <strong>發送表單</ strong> </ p> <p>使用jquery的Ajax請求如下所示:</ p> < pre> <code> $ .ajax({url:'你的網址在這裡',數據:formData,類型:'POST',contentType:false,//需要,不要這樣(需要jQuery 1.6+)processData:false ,//需要,不要討論這個// ...其他選擇,如成功等}}; </ code> </ pre> <p>在此之後,它將發送ajax請求,就像你提交常規表單一樣<code> enctype =“multipart / form-data”</ code> </ p> <p>更新:這個如果沒有<code>類型:“POST”</ code>,則請求無法工作,因為所有文件都必須通過POST請求發送。</ p> <p> <strong>注意:</ strong> <code> contentType:false </ code>僅可用<a href =“http://api.jquery.com/jQuery.ajax/”rel =來自jQuery 1的“noreferrer”>

我可以在Ajax調用中設置“enctype”嗎?我想我可能有問題。或者,我可以在FormData對像上設置它嗎? - Wouter 2014年6月1日7:50

您可以。為此,在我的代碼中必須完成文件上傳後才能查看行。 - 拼寫於2014年6月2日12:37

如何在服務器端收集數據... - Rahul Matte 16年4月28日在10:43

@Spell如何在控制器中獲取數據?需要發送getCsrfToken嗎? - ЮрийСветлов2016年5月22日16:11

@ManthanJamdagni當你得到$('form')時,它將返回jQuery對象。但是我們需要常規的js對象,而不需要jQuery功能。這就是我們用[0]表示法得到常規對象的原因。您可以調用document.getElementById()或simular調用,而不是這種結構。 - 拼寫於18年10月22日8:31

+310
<p>我無法在上面添加評論,因為我沒有足夠的聲譽,但上述答案對我來說幾乎是完美的,除了我必須添加</ p> <p>類型:“POST”</ p> <p>到.ajax電話。我試著弄清楚自己做錯了什麼,這是我所需要的一切,並且是一種享受。所以這就是整個片段:</ p> <p>完全贊同我上面的答案,這只是一個小小的調整。這是為了防萬一其他人卡住而且看不到明顯的。</ p> <pre> <code> $ .ajax({url:'你的網址在這裡',數據:formData,類型:“POST”, //添加此行//必須完成文件上傳內容類型:false,processData:false,// ...其他選項如成功等}} </ code>
+170
<pre> <code>&lt; form id =“upload_form”enctype =“multipart / form-data”&gt; </ code> </ pre> <p>使用CodeIgniter文件上傳的jQuery:</ p> <pre> <code> var formData = new FormData($('#upload_form')[0]); formData.append('tax_file',$('input [type = file]')[0] .files [0]); $ .ajax({type:“POST”,url:base_url +“member / upload /”,data:formData,//使用contentType,processData肯定.contentType:false,processData:false,beforeSend:function(){$ ('.modal .ajax_data')。prepend('&lt; img src =“'+ base_url +'”asset / images / ajax-loader.gif“/&gt;'); //$(”。modal .ajax_data“ ).html(“&lt; pre&gt; Hold on ...&lt; var formData = new FormData($('#upload_form')[0]); formData.append('tax_file',$('input [type = file]')[0] .files [0]); </ code> </ pre> <p>兩者都可以。</ p>
0
<pre> <code>查看:&lt; label class =“btn btn-info btn-file”&gt; 導入&lt; input type =“file”style =“display:none;”&gt; &LT; /標籤&gt; &LT;腳本&GT; $(document).ready(function(){$(document).on('change',':file',function(){var fileUpload = $(this).get(0); var files = fileUpload.files ; var bid = 0; if(files.length!= 0){var data = new FormData(); for(var i = 0; i&lt; files.length; i ++){data.append(files [i]。 name,files [i]);} $ .ajax({xhr:function(){var xhr = $。ajaxSettings.xhr(); xhr.upload.onprogress = function(e){console.log(Math.floor(e.loaded / e.total * 100)+'%'); }; 返回xhr; },contentType:false,processData:false,輸入:'POST',data:data,url:'/ ControllerX /'+ bid,success:function(response){location.href ='xxx / Index /'; }}; }}; }); &LT; / SCRIPT&GT; 控制器:[HttpPost] public ActionResult ControllerX(string id){var files = Request.Form.Files; ...... </ code> </ pre>

通常認為提供解釋和答案是好的形式。 - ouflak 2016年10月27日19:42

0
“OK”,closeOnConfirm:false},function(){window.location.href ='/ tripaction.php'; }); } else if(returndata =='Offline'){sweetAlert(“離線”,“請使用其他付款方式”,“錯誤”); }}}; }); </代碼> </ PRE>
0

實際上文檔顯示您可以使用 XMLHttpRequest()。send()來簡單地發送多形式數據,以防jquery糟透了

-10

早上好。

上傳多張圖片時遇到了同樣的問題。解決方案比我想像的更簡單:在名稱字段中包含[]。

 &lt; input type =“file”name =“files []”multiple&gt;   

我沒有對FormData進行任何修改。

這與問題所詢問的問題無關,而且僅僅是PHP如何使用具有相同名稱的多個值處理表單數據的特性。 - 昆汀4月24日15:17

0
votes
answers
23 views
+10

將js數組傳遞給mvc控制器,然後返回另一個視圖

0

我想通過post傳遞js數組到控制器,然後處理數據並將數據返回到另一個視圖。將js數組傳遞給mvc控制器,然後返回另一個視圖

難道不會

使用AJAX發佈數據,因爲我將無法返回另一種觀點認爲

當您使用:我所經歷的

enter image description here

問題$ .post它會調用您的操作,然後獲取一堆 HTML。然後你什麼也不做,所以瀏覽器只是把它扔到 以外。如果你只想去新的頁面,做一個普通的帖子, 不使用ajax。 Ajax更適合於如果你需要打電話給你的服務器到 獲取一些信息來更新當前頁面,而不是去一個新的。

(我想這是爲$ http.post一樣呢?)

使用難道不會定期崗位(@ Html.Beginform)我想我becaue將無法通過js數組?

我應該如何處理?

+1

你可以做一個普通郵寄如果表單包含含有在值輸入數組 –

+0

這是一個想法,但不是有點原始? (只是好奇) –

+2

提交表單的標準方式是原始的?你也可以做一個ajax調用,而是返回一個你不使用的視圖,只是返回一個簡單的'JsonResult',否則表示成功,如果成功,使用'location.href'在'success'中重定向。回調 –

沙发
0
1

如果你絕對要做一個正常的形式提交(非Ajax)的數據在你的js變量,你可以打造爲某種形式的輸入元素你在js變量中的數據,然後你可以使用javascript來提交這個表單。只要元素的名稱與您的操作方法參數匹配,模型綁定就可以工作。

下面是一個簡單的例子,使用jQuery在按鈕單擊事件上發送字符串列表。

$(function() { 

    var flags = ["aa", "bb", "cc"]; 
    var targetUrl="@Url.Action("Summary","Home")"; 

    $("#SubmitButton").click(function(e) { 

     //First build a form element and set the action attribute value 
     var $f = $("<form></form>").attr("action",targetUrl).attr("method","post"); 

     //Loop throug the string and create an input element for each item 
     $.each(flags, function(a, b) { 

      var $el = $("<input type='hidden' name='flagsChecked' />").attr("value",b); 

      //Add the input element to the form 
      $f.append($el); 

     }); 

     //Add the form to the page and submit the form 
     $f.appendTo("body").submit(); 

    }); 

}); 

並且在你的http post action方法中,你可以返回一個視圖。

[HttpPost] 
public ActionResult Summary(List<string> flagsChecked) 
{ 
    return View("Summary"); 
} 

如果你的代碼是UDPATE一些數據,我強烈建議你遵循P-R-G pattern並返回一個重定向響應。

[HttpPost] 
public ActionResult Summary(List<string> flagsChecked) 
{ 
    return RedirectToAction("Summary"); 
} 
+0

工作正常,看起來不錯,謝謝! –

板凳
0
0

您可以在@Html.BeginForm的普通帖子中傳遞多個值。 然後將這些值編碼爲:key=foo&key=bar&key=baz。 看看下面後,如果您需要了解更多信息:https://www.hanselman.com/blog/ASPNETWireFormatForModelBindingToArraysListsCollectionsDictionaries.aspx

+0

我認爲這是不可能的,因爲我生成來自js腳本的數據(它們不從控制器傳遞) –

地板
0
0

通JS數組MVC控制器

那麼你有兩個不同的問題。首先,您必須將application/x-www-form-urlencoded或multipart/form-data或json綁定到您的對象/數組。

Phil Haacked - Model Binding To A List

摘錄:

開始

<form method="post" action="/Home/UpdateInts"> 
    <input type="text" name="ints" value="1" /> 
    <input type="text" name="ints" value="4" /> 
    <input type="text" name="ints" value="2" /> 
    <input type="text" name="ints" value="8" /> 
    <input type="submit" /> 
</form> 

你採取小提琴手,看看什麼樣的數據實際上得到點擊提交按鈕時發佈的,你會看到下面的。

ints=1&ints=4&ints=2&ints=8 

默認的model binder看到所有具有相同的名稱,這些名稱/值對並將其轉換爲與關鍵整數,然後將其與整型參數到你的動作方法匹配一個集合。很簡單!

年底

然後返回另一種觀點認爲

那麼你有非常兩種選擇。

首先,您使用標準<form>元素的URL和提交表單(提交按鈕,jQuery等)的方式。優點:它一直在litteraly左右,使用非常簡單。缺點:如果有網絡中斷或你的用戶體驗很差(瀏覽器,url無法找到,所以我刷新了,我重新提交...我不知道..等)

二,你使用Ajax請求併發送數據。當迴應成功時,您將window.location您的用戶移到下一個屏幕。優點:出色的用戶體驗,如果網絡出現故障,您可以重試或給用戶重試的方式。缺點:實施更多的工作。

4楼
0
0

是否必須是帖子?

一個JavaScript示例使用GET請求,這樣做的:

var url = "/Controller/Action?"; 
var myArray = {id1: 100, id2: 200, "id3": 300}; 

for (var key in myArray) { 
url += key+"="+myArray[key] + "&" 
} 

window.top.location.href = url 

否則只是做一個帖子:

var form = $('<form></form>'); 
var url = "/Controller/Action"; 
form.attr("method", "post"); 
form.attr("action", url); 
var myArray = {id1: 100, id2: 200, "id3": 300}; 

for (var key in myArray) { 
    var field = $('<input></input>'); 

    field.attr("type", "hidden"); 
    field.attr("name", key); 
    field.attr("value", myArray[key]); 

    form.append(field); 
}); 

$(document.body).append(form); 
form.submit(); 
0
votes
answers
22 views
+10

PHP連接無法正常工作

0

因此,我正在嘗試爲我的網站創建分頁,而無需刷新頁面。 我爲此使用了ajax,php和mysql。PHP連接無法正常工作

目前,我被困在PHP,特別是與foreach和concatenation。

這裏是我的foreach循環:

if (isset($_POST['page'])) { 
    $algus = $_POST['page']; 
    $loos = ''; 
    $mitu = 5; 
    $msg = []; 

    foreach (uritused($conn, $id, $algus, $mitu) as $key => $vals) { 
     $loos .= "<tr class='tr-data'>"; 
     $loos .= '<td>'.$vals['eventi_nimi'].'<br><span class="owner" data-id="'.$vals['owner-id'].'">'.$vals['owner'].'</span></td>'; 
     $loos .= '<td data-loosiaeg="'.$vals['loosiAeg'].'">'.$vals['loosiAeg'].'</td>'; 
     $loos .= '<td>'.$vals['attendiloos'].'</td>'; 
     $loos .= '<td>'; 
     if (is_array($vals['auhinnad'])) { 
      foreach($vals['auhinnad'] as $keys => $val){ 
       $loos .= $val['auhind'].'<br>'; 
      } 
     } else { 
      $loos .= $vals['auhinnad']; 
     } 
     $loos .= '</td>'; 
     $loos .= '<td>Postitus: '.$vals['tingimused']['postitus'].'<br>Osalus: '.$vals['tingimused']['osalus'].'</td>'; 
     $loos .= '<td>'; 
     if (is_array($vals['valista'])) { 
      foreach($vals['valista'] as $keys => $val){ 
       $loos .= $val['nimi'].'<br>'; 
      } 
     } else { 
      $loos .= $vals['valista']; 
     } 
     $loos .= '</td>'; 
     $loos .= '<td data-sec='.$vals['sec'].' class="tr-icons"> 
    <i class="material-icons staatus ' . $vals['staatus'] . '" data-staatus="'.$vals['staatus'].'" data-toggle="tooltip" data-placement="bottom" data-class="stopped" data-eltext="radio_button_checked" data-text="radio_button_unchecked" title="Peata loosimine">radio_button_checked</i></td>'; 
     $loos .= "</tr>"; 
    } 
    $msg['data'] = $loos; 
    $msg['success'] = true; 

    echo json_encode($msg); 
} 

這裏是我的Ajax調用

var page = 1; 
$.ajax({ 
    type: "POST", 
    url: "pages/php/loosid_data.php", 
    cache: false, 
    dataType: 'json', 
    data: {'page': page}, 
    success: function(msg){ 
    console.log(msg); 
    if(msg['success']){ 
     $('.tr-data').remove(); 
     $('.m-loosid table').append(msg['data']); 
    } 
    }, 
    error: function(msg){ 
    console.log(msg); 
} 
}); 

編輯:繼承人的功能

function uritused($conn, $id, $algus, $mitu){ 
try{ 
    $uritused = $conn->prepare("SELECT COUNT(*) FROM loosid WHERE usr_id='$id'"); 
    $uritused->execute(); 
}catch(PDOException $e){ 
    echo $e->getMessage(); 
} 
$uritus_arr = []; 
$count = $uritused->fetchColumn(); 
if($count > 0){ 
    try{ 
    $urituseds = $conn->prepare("SELECT * FROM loosid WHERE usr_id='176237127636' ORDER BY loosiAeg DESC LIMIT 1, 5"); 
    $urituseds->execute(); 
    }catch(PDOException $e){ 
    echo $e->getMessage(); 
    } 
    $uritus = $urituseds->fetchAll(); 
    for ($z=0;$z<$count;$z++) { 
     $uritus_arr[$z] = array(
     'eventi_nimi' => $uritus[$z]['eventi_nimi'], 
     'loosiAeg' => $uritus[$z]['loosiAeg'], 
     'tingimused' => array(
      'postitus' => $uritus[$z]['post'], 
      'osalus' => $uritus[$z]['osalus'] 
     ), 
     'sec' => $uritus[$z]['sec'], 
     'staatus' => $uritus[$z]['staatus'], 
     'attendiloos' => $uritus[$z]['attendiloos'] 
    ); 
     $auhinnad = explode(',', $uritus[$z]['auhinnad']); 
     if($uritus[$z]['auhinnad'] != '-'){ 
     foreach ($auhinnad as $key) { 
      $auhind = explode('-', $key); 
      $auhinna_arr[] = array(
       'auhind' => $auhind[0], 
       'voitjad' => $auhind[1] 
      ); 
     } 
     $uritus_arr[$z]['auhinnad'] = $auhinna_arr; 
     }else{ 
     $uritus_arr[$z]['auhinnad'] = $uritus[$z]['auhinnad']; 
     } 

     $valista = explode(',', $uritus[$z]['valista']); 
     if($uritus[$z]['valista'] != '-'){ 
     foreach ($valista as $keys) { 
      $valistad = explode('-', $keys); 
      $valista_arr[] = array(
       'nimi' => $valistad[0], 
       'id' => $valistad[1] 
      ); 
     } 
     $uritus_arr[$z]['valista'] = $valista_arr; 
     }else{ 
     $uritus_arr[$z]['valista'] = $uritus[$z]['valista']; 
     } 

     $valista_arr = []; 
     $auhinna_arr = []; 
    } 

} 
return $uritus_arr; 
} 

現在,這給了我UNDEFINED OFFSET,雖然我知道數據庫中有這些信息。 由於某些原因數據總是空的。 enter image description here

每當我嘗試在沒有ajax的情況下直接在我的頁面中運行這個相同的代碼時,一切都按照它應該的方式工作。

也許你們對如何解決這個問題有什麼建議?我知道這裏有同樣的帖子,但我還沒有找到我的答案。

+0

顯示uritused函數的代碼 –

+1

看起來像'dataType:'json','但發送'html'作爲迴應 – RamRaider

+0

你確定'uritused'返回任何東西嗎? –

沙发
0
0

@Gino Pane

我很抱歉,但事實並非如此。看來我用我的查詢犯了一個菜鳥錯誤。我在數據庫中只有一個數據實例,但我的限制設置爲1,5,但它應該是0,5。

基本上,我的查詢是從數據庫中查找數據,從1開始,當它應該在這就是爲什麼我覺得數據庫中沒有數據。

我還說過,當我在頁面上直接回顯foreach時,它工作的原因是當時我在數據庫中有超過1個數據實例。

對不起,浪費你的時間傢伙。

+0

不是浪費時間。將其他人的注意力放在這個問題上是解決問題的好方法,即使你是最終解決問題的人。向別人解釋之後,我們都解決了自己的問題。 –

0
votes
answers
27 views
+10

虛假AJAX OPTIONS請求被用GET請求

0

我想提出以下虛假AJAX OPTIONS請求被用GET請求

let x = new XMLHttpRequest(); 
x.onload = function(event) { …}; 
x.open("GET", url, true); 
x.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); 
x.send(); 

問題與代碼標準的AJAX請求是,由於某種原因,我無法捉摸,二Ajax請求是一起做製作。第一個是OPTIONS請求,第二個是我真正想要的GET請求。任何想法爲什麼?

我的服務器是一個應用程序的NodeJS其中我使用nodemon其重新啓動服務器,如果它檢測index.js已發生變化(這是發展有幫助的,當你不希望停止和重新啓動服務器)。通過此OPTIONS業務,nodemon認爲我的index.js已更改並重新啓動nodejs

此外,OPTIONS請求會返回一個成功的請求,返回http 200.但是,沒有任何內容返回到首先發起ajax請求的網頁(這可能是OPTIONS請求後立即發生的,nodejs通過nodemon重新啓動。然後GET請求是重複的,也有200和網頁得到結果

沙发
0
1

的問題是,由於某種原因,我無法捉摸,二Ajax請求製成。第一一個是OPTIONS請求,第二個是我真正想要的GET請求。任何想法爲什麼?

由於您正在進行跨通信來電(例如,從http://localhosthttp://localhost:someport),Same Origin Policy通常不允許這樣做。所以瀏覽器發送一個「pre-flight」OPTIONS請求來查看服務器是否想通過Cross-Origin Resource Sharing來允許呼叫。

0
votes
answers
18 views
+10

如何調用PHP函數,返回其結果在其他地方

1

新秀PHP開發人員想要實現我的功能,像這樣:如何調用PHP函數,返回其結果在其他地方

  • 呼叫從<a>一個PHP函數的參數(這是我的菜單鏈接)

  • 返回一個單獨<div> PHP函數輸出(這是內容區域)

我已經創建了我的樂趣ctions和所有的工作都很好,但我無法通過從菜單調用它來實現它。我的猜測是我需要AJAX?

任何鉛讚賞

+0

這正是阿賈克斯。 https://www.w3schools.com/xml/ajax_php.asp你可以找到php的例子 – geekido

+0

AJAX是不相關的。您正在尋找的術語是「API」。 API可以是同步的也可以是異步的。 –

+0

但是,建議使用Ajax(異步),以提供更好的用戶體驗,因爲這樣可以在不改變瀏覽器位置的情況下交換請求和數據 – TheMintyMate

沙发
0
0

是AJAX是要走的路。

下面是使用jQuery和AJAX一個小例子:

<a role="button" data-someAction="myAction">My action</a> 
<div id="action_result"></div> 

<!-- load jQuery libraries --> 
<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script> 

<script type="text/javascript"> 

    $(document).ready(function() { 

     $('a').click(function() { 

      $.ajax({ 
       type: 'POST', 
       url: 'action.php', 
       data: $(this).attr('data-someAction'), 
       success: function (data) { 

        $('#action_result').html(data); 

       } 
      }); 

     }); 

    }); 
</script> 

PHP

$code = <<<HERE 
    function someAction() { 
    echo 'awesome'; 
    } 
HERE; 

echo $code; 
板凳
0
0

調用它,你需要設置一個事件處理程序,以檢測是否a已被點擊。即:

HTML:

<a href="something.php" id="link"></a> 

JS:

function handler(){ 
    console.log("Clicked!"); 
    somefunction(); 
} 

document.getElementById("link").addEeventListener("click",handler); 

的jQuery:

$("#link").click(function(event){ 
    //ajax here... 
}); 

https://www.w3schools.com/jsref/met_document_addeventlistener.asp

0
votes
answers
30 views
+10

Greasemonkey沒有刷新頁面?

-1

嘿,我有這個代碼,通過greasemonkey自動回答問題,但它只適用於刷新頁面。問題是由AJAX提出的,所以一旦頁面刷新整個遊戲不起作用,否則,如果我保持這種方式而不刷新代碼,則不會在第二類第三等問題上起作用。Greasemonkey沒有刷新頁面?

所以我的問題是可以保持greasemonkey工作而不刷新頁面不斷?

See: http://jsfiddle.net/t2AzN/14/ 
+0

您可以發送一個Ajax請求的Greasemonkey網站和更新您的HTML頁面? – Max08

+0

http://jsfiddle.net/t2AzN/14/ – hcttepe

+0

是的,但是你沒有發佈足夠的代碼,你沒有發佈有AJAX問題的頁面? –

沙发
0
0

你應該可以用MutationObserver來做到這一點。

如果你把回答了這個問題到一個名爲answerQuestions功能,代碼然後像這樣可能會爲你(改編自上面鏈接的例子)工作:

// select the target node 
var target = document.getElementById('question-container'); 

// create an observer instance 
var observer = new MutationObserver(function(mutations) { 
    answerQuestions();  
}); 

// configuration of the observer: 
var config = { attributes: true, childList: true, characterData: true }; 

// pass in the target node, as well as the observer options 
observer.observe(target, config); 

// later, you can stop observing 
observer.disconnect(); 
+0

謝謝你的工作......我還有其他問題。你可以幫我嗎?我怎樣才能自動點擊查詢按鈕或li標籤? – hcttepe

+0

您需要觸發所需元素上的點擊事件。請參閱https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Creating_and_triggering_events#Triggering_built-in_events瞭解如何以標準方式進行操作。像jQuery這樣的框架可以讓這種事情變得更加簡單。 – JRI

0
votes
answers
23 views
+10

獲取所選下拉菜單的數據

1

當我在下拉菜單中選擇或選擇產品時,如何獲取我的product_rate的值並將其放入禁用的輸入字段中。獲取所選下拉菜單的數據

enter image description here

enter image description here

<?php 
    $con = mysqli_connect("localhost", "root", "", "dbselectedropdown"); 

    if (!$con) { 
     die("Connection failed: " . mysqli_connect_error()); 
    } 
?> 
<html> 
<head> 
    <title>Selected Dropdown</title> 
</head> 
<body> 
    <select name="product_select" id="product_select"> 
     <option>--SELECT--</option> 
     <?php 
      $query = mysqli_query($con, "SELECT * FROM tbselectedropdown"); 
      while ($row = mysqli_fetch_array($query)) { 
       echo "<option>" .$row["product_name"]. "</option>"; 
      } 
     ?> 
    </select><br/><br/><br/><br/><br/><br/> 
    <input type="text" name="product_inputfield" id="product_inputfield" disabled/> 
</body> 
<script> 

</script> 
</html> 
沙发
0
1

一是提高PHP:

$query = mysqli_query($con, "SELECT * FROM tbselectedropdown"); 
while ($row = mysqli_fetch_array($query)) { 
    echo "<option value=" . $row["product_rate"] . ">" .$row["product_name"]. "</option>"; 
} 

二,添加腳本:

<script> 
    var input = document.getElementById('product_select') 
    input.addEventListener('change', function (e) { 
    document.getElementById('product_inputfield').value = e.value 
    }) 
</script> 

或者,如果你正在使用jQuery :)

<script> 
    $('#product_select').change(function() { 
    $('product_inputfield').val($(this).val()) 
    }) 
</script> 
+0

解決了!非常感謝你。我不知道可以提取數據並將其放入值中。哈哈。 –

+0

@FrancisJohnVargas這是確定:)簡單的,你可以看到:) – WaldemarIce

+0

是的,雖然我已經在那裏使用jQuery。哈哈。順便說一句,我不能從現在開始喜歡你的答案。它說10分鐘後,我真的很感謝你的幫助。再次感謝你。 –

板凳
0
0

如果您已經在使用,我建議您使用JQuery,這相當簡單。聆聽任何更改,如果有更改,則將文本添加到禁用的輸入。

// create new function on change of select input 
 
$('#product_select').change(function() { 
 
    // create variable for product 
 
    var product = $("#product_select").find(':selected').text(); 
 
    // create an input variable 
 
    var input = $("#product_inputfield"); 
 
    
 
    // for testing you can output the select 
 
    alert('Changed value: ' + product); 
 
    
 
    // create the if statements 
 
    if(product === 'acer') { 
 
    input.val(1500); // change the value with your PHP 
 
    // <?=$row['product_rate'];?> 
 
    } else if(product === 'samsung') { 
 
    input.val(3200); 
 
    } else if(product === 'lenovo') { 
 
    input.val(5300); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<html> 
 
<head> 
 
    <title>Selected Dropdown</title> 
 
</head> 
 
<body> 
 
    <select name="product_select" id="product_select"> 
 
     <option value="">--SELECT--</option> 
 
     <option value="acer">acer</option> 
 
     <option value="samsung">samsung</option> 
 
     <option value="lenovo">lenovo</option> 
 
    </select><br/><br/><br/><br/><br/><br/> 
 
    <input type="text" name="product_inputfield" id="product_inputfield" readonly/> 
 
</body> 
 
<script> 
 

 
</script> 
 
</html>

91
votes
answers
17 views
+10

json_encode not working with a html string as value

I am debugging this ajax for quite a time now. I have this on my jQUery file:

$("#typeForm").ajaxForm({
    success : function(html){
        alert(html);
}).submit();

This calls service.php, and within it I have this:

$data = array('upload_data' => $this->upload->data());
$str = "<div style='position:relative'><img src='/assets/ui/success.png' /><span style='position:relative;top:-15px;'>Nachricht empfangen!</span></div>";
echo json_encode(array('file_name' => $data['upload_data']['file_name'], 'prompt' => $str));

This won't work. But by replacing $str to $str = "HELLO WORLD"; the jQuery alerts what should I expected. What seems to be the problem?

EDIT:

Here is a screenie of the output:

enter image description here

It does alerts, but if I modify my jQuery into this:

$("#typeForm").ajaxForm({
    success : function(html){
        var obj = $.parseJSON(html);
        alert(obj);
}).submit();

Then it does nothing at all, even alerting.

I did a var_dump on the json_encode and here is the dump, it looks like a malformed JSON:

string(214) "{"file_name":"cde595988d386529909ce5a8fe3a6d6f.png","prompt":"<div style="position:relative;"><img src="/assets/ui/success.png" =""><span style="position:relative;top:-15px;">Nachricht empfangen!&lt;/span&gt;&lt;/div&gt;"}"
</span></div>

Here is the full content of service.php

class Service extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
    }
    public function index()
    {
        $filename = 'uploadfile';

        $config['upload_path'] = './uploads/temp';
        $config['allowed_types'] = 'jpg|png|gif|doc|docx|pdf|ppt|pptx|xls|xlsx|bmp';
        $config['max_size'] = '3072';
        $config['encrypt_name'] = TRUE;
        $config['remove_spaces'] = TRUE;

        $this->load->library('upload', $config);

        if (!$this->upload->do_upload($filename))
        {
            $error = array('error' => $this->upload->display_errors());
                    echo json_encode(array('error' => $error['error']));
        }
        else
        {
            $data = array('upload_data' => $this->upload->data());
            $file_name = $data['upload_data']['file_name'];
            //print_r($data);
            //echo json_encode(array('test' => "Hello World"));
            $str = "<div style='position:relative;'><img src='/assets/ui/success.png' /><span style='position:relative;top:-15px;'>Nachricht empfangen!</span></div>";
            $str2 = json_encode(array("file_name" => $file_name, "prompt" => $str));
            //var_dump($str2);
            exit(json_encode(array('file_name' => $data['upload_data']['file_name'], 'prompt' => $str)));
        }
    }
}
沙发
+870

今天我遇到了與 json_encode 相同的問題。但經過大量測試後我找到了正確的解決方案:

在PHP中編碼數組或字符串:

  json_encode($ array,JSON_HEX_QUOT | JSON_HEX_TAG);   

在JS中解碼相同的內容:

  var d = $ .parseJSON(content);  
     
			
        

驚人的答案!這是做到這一點的方法。 - Antonio Max 2013年9月19日18:31

我遇到了同樣的問題,但我差點就解決了。我使用的是json_encode($ json,JSON_HEX_QUOT | JSON_HEX_APOS)。將JSON_HEX_APOS更改為JSON_HEX_TAG使我的問題消失了! - RedYetiCo 2014年3月8日3:46

這應該標記為正確的答案。 - Robert於2015年12月9日凌晨2點54分

伙計們......你救了我的命!謝謝。堆棧溢出社區的長壽命! - Roberto Conte Rosito 2016年10月1日8:17

像魔術一樣工作! - Joel Hernandez於18年5月22日17:38

板凳
+30

要嘗試的一些東西:

ajaxForm支持dataType參數,如果您希望來自服務器的JSON,請使用 dataType:json ,如此

  $(“#typeForm”)。ajaxForm({success:function(html){// html here has a json object alert(html.prompt);},dataType:'json'})。submit( );   

你能發布完整的service.php嗎?或者嘗試以下操作:

退出(json_encode(array('file_name'=&gt; $ data ['upload_data'] ['file_name'],'prompt'=&gt; $ str)) );

- 編輯 -

不確定為什麼json_encode會返回如此奇怪的字符串:s,是 json_encode < / code>標準的php庫還是外部庫?我問這個是因為有些服務器在他們的php安裝中沒有json_encode ...我在我的本地測試並使用php內部json_encode並且工作正常:

 &lt;?php $ str =“&lt; div style ='position:relative'&gt;&lt; img src ='/ assets / ui / success.png'/&gt;&lt; span style ='position:relative; top:-15px;'&gt; ; Nachricht empfangen!&lt; / span&gt;&lt; / div&gt;“; echo json_encode(array('prompt'=&gt; $ str)); // output // {“prompt”:“&lt; div style ='position:relative'&gt;&lt; img src ='/ assets / ui / success.png'/&gt;&lt; span style ='position:relative ; top:-15px;'&gt; Nachricht empfangen!&lt; / span&gt;&lt;
     
			
        

謝謝你,但不,它不起作用。如果我這樣做,那麼它根本不會發出警報。 - 行星x 12年3月19日3:36

你有測試頁嗎?如果我可以通過直接測試更容易 - Andreas Wong 3月19日在3:37

是的,它不會提醒,因為dataType json會期望一個有效的json字符串,在這種情況下“HELLO WORLD”不是一個有效的json - Andreas Wong 3月19日在3:38

謝謝,但沒有我沒有這個測試頁面。它是在我當地設置的。我想這涉及一個格式錯誤的JSON,因為如果我var_dump json_encode它看起來像一個格式錯誤的JSON。 - 行星x 12年3月19日3:44

如果您使用的是Chrome瀏覽器,請按F12並查看右下角,如果您看到類似(x)1的內容,它可能會告訴您。json_encode應該正確地逃避你的HTML,所以不要過於擔心stackoverflow.com/questions/9492916/putting-html-in-json - Andreas Wong 3月19日在3:45

地板
+10

如果找不到更好的解決方案,可以將值編碼為base64編碼:

  $ data = array('upload_data'=&gt; $ this-&gt; upload-&gt ;數據()); $ str = base64_encode(“&lt; div style ='position:relative'&gt;&lt; img src ='/ assets / ui / success.png'/&gt;&lt; span style ='position:relative; top:-15px ;'&gt; Nachricht empfangen!&lt; / span&gt;&lt; / div&gt;“); echo json_encode(array('file_name'=&gt; $ data ['upload_data'] ['file_name'],'prompt'=&gt; $ str));   

並在客戶端解碼它,IMO這更安全,如果您處理來自不同語言的字符,這也更適用。

另外:

這有點工作,但你會如何在jQuery中解碼它? - 行星x 12年3月19日5:12

對於chrome或mozilla你可以使用atob()或btoa() - jerjer 3月19日在5:15

對於其他瀏覽器你可以使用這個js庫ntt.cc/2008/01/19/base64-encoder-decoder-with-javascript.html或者這個stackoverflow.com/questions/246801/ - jerjer 3月19日在5:16

這是個好主意,php側的base64編碼和js端的base64解碼。 - Wasim A. 18年3月23日7:33

4楼
0

看起來您需要在服務器端轉義引號。由於它們在那裡,它似乎是在創建一個無效的JSON字符串。

正是我懷疑的,但我似乎無法找到適當的逃避我應該在$ str - planet x 3月19日'12 3:30

5楼
0

如何轉換所有潛在的問題字符而不是解決此問題的問題:

  die(json_encode($ data,JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE)) ;   

http://php.net /manual/en/function.json-encode.php

http://php.net/manual/en/json.constants.php