Building categories block based on JSON I'm not even sure if this is how you're supposed to do it, but this is what I have so far:

$.getJSON("/api/get_categories", function(data){
    var items = [];
   $.each(data["categories"], function(key, value){

    items.push('&lt;div class="card"&gt;&lt;div class="card waves-effect waves-block waves-light"&lt;/div&gt;&lt;div class="card-content"&gt;&lt;span class="card-title activator grey-text text-darken-4"&gt;'+value+'&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;');
   });

   $("#categories").html(items.join(""));

});


The issue is that the string within my push looks really awkward and long. What's the better way of doing this?
I have a few issues with your code before I get into your actual question:


Your indentation is inconsistent and wrong, you should be using two or four space indentation, not three-space indentation.
Your usage of quotation marks is inconsistent, use either " or ', but stay consistent.
BUG: you're missing a close html tag character in here: &lt;div class="card waves-effect waves-block waves-light"&lt;/div&gt;.
Instead of pushing it into the block as one big lump, consider pushing it through at each category, that way it'll actually look like it's loading, and you can avoid storing a massive html string. You can use jQuery's .append to do this


As for your specific question, I would style it better by splitting it into parts, and joining each part like so:

$.getJSON('/api/get_categories', function(data){
    $.each(data.categories, function(key, value){
        $('#categories').append(
            '&lt;div class="card"&gt;' +
            '&lt;div class="card waves-effect waves-block waves-light"&gt;&lt;/div&gt;' +
            '&lt;div class="card-content"&gt;' +
            '&lt;span class="card-title activator grey-text text-darken-4"&gt;' +
            value + '&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;'
        );
    });
});